Código:
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <windows.h>
#define PORT "6665"
struct info{
char *host;
char *channel;
char *user;
}Ainfo;
int connect_irc(char *host){
struct addrinfo *result,*copy;
struct addrinfo hints;
int sock,getadd;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = 0;
getadd=getaddrinfo(host,PORT,(struct addrinfo *)&hints,&result);
if(getadd!=0){
perror("\n");
exit(0);
}
sock = socket(result->ai_family,result->ai_socktype,result->ai_protocol);
if (connect(sock, result->ai_addr, result->ai_addrlen) != 0)
{
perror("\n");
exit(0);
}
return sock;
}
char *read_info(int sockd,char *pointer){
size_t length = 0;
char info = 0;
while(pointer[length-1]!='\n')
{
int data = recv(sockd, &info, 1, 0);
pointer[length]=info;
length++;
}
return pointer;
}
void set_nick(int sock, char nick[]) {// </editor-fold>
char nick_packet[512];
sprintf(nick_packet, "NICK %s\r\n", nick);
send(sock, nick_packet, strlen(nick_packet), 0);
}
void send_user_packet(int sock, char nick[]){
char user_packet[512];
sprintf(user_packet, "USER %s 0 * :%s\r\n", nick, nick);
send(sock, user_packet, strlen(user_packet), 0);
}
void join_channel(int sock, char channel[]){
char join_packet[512];
sprintf(join_packet, "JOIN %s\r\n", channel);
send(sock, join_packet, strlen(join_packet), 0);
}
void send_pong(int sock, char argument[]){
char pong_packet[512];
sprintf(pong_packet, "PONG :%s\r\n", argument);
send(sock, pong_packet, strlen(pong_packet), 0);
}
int main(int argc, char *argv[])
{
printf("Atbot IRC bot");
Ainfo.user=argv[1];
Ainfo.host=argv[2];
Ainfo.channel=argv[3];
int sock_result = connect_irc(Ainfo.host);
set_nick(sock_result,Ainfo.user);
send_user_packet(sock_result,Ainfo.user);
join_channel(sock_result,Ainfo.channel);
while(1){
char data[1024];
char *array = read_info(sock_result,data);
printf("%s",array);
}
return 0;
}