Skip to content

Instantly share code, notes, and snippets.

@astronautlevel2
Last active July 1, 2017 14:52
Show Gist options
  • Save astronautlevel2/041b1bd2511b5e91b2f0f06d795fb0ba to your computer and use it in GitHub Desktop.
Save astronautlevel2/041b1bd2511b5e91b2f0f06d795fb0ba to your computer and use it in GitHub Desktop.
#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;
}
}
@ndiddy99
Copy link

ndiddy99 commented Jul 1, 2017

like if smosh sent you here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment