Last active
July 1, 2017 14:52
-
-
Save astronautlevel2/041b1bd2511b5e91b2f0f06d795fb0ba to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <sys/socket.h> | |
#include <sys/types.h> | |
#include <netinet/in.h> | |
#include <arpa/inet.h> | |
#include <string.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <unistd.h> | |
#define BUF_SIZE 100 | |
int irc_connect(char* addr, int port) | |
{ | |
int sock = socket(AF_INET, SOCK_STREAM, 0); | |
if (sock < 0) | |
{ | |
perror("sock"); | |
exit(1); | |
} | |
struct sockaddr_in serv_addr; | |
serv_addr.sin_family = PF_INET; | |
serv_addr.sin_port = htons(port); | |
inet_aton(addr, &serv_addr.sin_addr); | |
memset(&(serv_addr.sin_zero), '\0', 8); | |
int status = connect(sock, (struct sockaddr*)&serv_addr, sizeof(struct sockaddr)); | |
if (status != -1) | |
{ | |
struct sockaddr_in peer_addr; | |
int sin_size = sizeof(struct sockaddr); | |
getpeername(sock, (struct sockaddr*)&peer_addr, &sin_size); | |
} else { | |
perror("connect"); | |
exit(1); | |
} | |
return sock; | |
} | |
int main(int argc, char **argv) | |
{ | |
if (argc != 3) | |
{ | |
printf("Usage: %s address port", argv[0]); | |
exit(1); | |
} | |
char *addr = argv[1]; | |
int port = atoi(argv[2]); | |
fd_set master; | |
fd_set read_fds; | |
struct timeval tv; | |
int status; | |
tv.tv_sec = 1; | |
tv.tv_usec = 0; | |
FD_ZERO(&master); | |
FD_ZERO(&read_fds); | |
int sock_fd = irc_connect("173.230.128.213", port); | |
FD_SET(sock_fd, &master); | |
FD_SET(0, &master); | |
for (;;) | |
{ | |
read_fds = master; | |
status = select(sock_fd+1,&read_fds,NULL,NULL,&tv); | |
if (status == -1) | |
{ | |
perror("select"); | |
exit(1); | |
} | |
else if (status == 0) | |
{ | |
tv.tv_sec = 1; | |
tv.tv_usec = 0; | |
} | |
if (FD_ISSET(sock_fd, &read_fds)) | |
{ | |
char buf[BUF_SIZE]; | |
int bytes_received = recv(sock_fd, &buf, BUF_SIZE, 0); | |
if (bytes_received == 0) { | |
puts("Remote host closed connection"); | |
exit(1); | |
} | |
buf[bytes_received] = '\0'; | |
printf("%s", buf); | |
} | |
if (FD_ISSET(STDIN_FILENO, &read_fds)) | |
{ | |
ssize_t r; | |
char buf[BUF_SIZE + 2]; | |
memset(&buf, 0, BUF_SIZE); | |
r = read(STDIN_FILENO, buf, BUF_SIZE); | |
if (buf[r-1] = '\n') | |
{ | |
buf[r-1] = '\r'; | |
buf[r] = '\n'; | |
} | |
r = send(sock_fd, buf, r + 1, 0); | |
} | |
char buf[BUF_SIZE]; | |
int numbytes = 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
like if smosh sent you here