#include #include #include #include #include #include #include #include int main(int args, char ** argv){ struct sockaddr_in sad; sad.sin_port = htons(atoi(argv[2])); sad.sin_family = AF_INET; int skt = socket(AF_INET, SOCK_STREAM, 0); struct hostent* entry = gethostbyname(argv[1]); struct in_addr **addr_list = (struct in_addr**)entry->h_addr_list; struct in_addr* c_addr = addr_list[0]; char* ip_string = inet_ntoa(*c_addr); sad.sin_addr = *c_addr; printf("Connecting to: %s\n", ip_string); connect(skt, (struct sockaddr*)&sad, sizeof(struct sockaddr_in)); char type; ssize_t readlen = read(skt, &type, 1); if(type == 14 && readlen > 0){ char major, minor; read(skt, &major, 1); read(skt, &minor, 1); uint16_t extensions; // The following line had == instead of = readlen = recv(skt, &extensions, 2, MSG_WAITALL); if(readlen != 2){ printf("Couldn't read extensions, giving up! readlen = %lu, extensions = %d\n", readlen, extensions); goto done; } printf("Connected to a version %d.%d lurk server with %d bytes of extensions\n", major, minor, extensions); } else { printf("Not connected to a valid lurk server\n"); } done: close(skt); return 0; }