Проблема с сервером MSN (Программирование сокетов linux)
Я пытаюсь использовать MSN messenger с открытым исходным кодом(самая старая версия tmsnc), и сейчас он не поддерживается.
Проблема заключается в части сокета он пытается подключиться hotmail.messenger.com (как адрес хоста), который больше не поддерживается, я искал об этом, и некоторым парням было предложено использовать
Цитата:messenger.hotmail.geo.msnmessenger.msn.com.akadns.net
вместо этого, но после того, как он дает мне сервер в других частях, таких как send (), он дает мне сброс соединения по ошибке однорангового узла или иногда даже не может связать его.
Возможно ли это вообще исправить? может путем замены другого сервера или ...
Что я уже пробовал:
комментируемая часть-это моя, где я пытался смоделировать исходную часть с помощью getaddrinfo() и loop, чтобы найти хороший результат, но таким образом даже она не может привязаться.
int tcp_connect(char *server, int port) { /* struct addrinfo hints, *servinfo , *p; int sockfd; int rv; int yes = 1; memset(&hints, 0, sizeof hints); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; if ((rv = getaddrinfo("messenger.hotmail.geo.msnmessenger.msn.com.akadns.net", "4000", &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); return 1; } // loop through all the results and bind to the first we can for(p = servinfo; p != NULL; p = p->ai_next) { if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { perror("server: socket"); continue; } if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { perror("setsockopt"); exit(1); } if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) { close(sockfd); perror("server: bind"); continue; } if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1) { close(sockfd); perror("client: connect"); continue; } break; } freeaddrinfo(servinfo); // all done with this structure if (p == NULL) { fprintf(stderr, "server: failed to bind\n"); exit(1); } return sockfd; */ struct sockaddr_in localAddr, servAddr; // Used in connect and bind struct hostent *h; // Used for address resolving int rc; // Function return code int sd; // The socket descriptor //Resolve the address h = gethostbyname(server); if(h==NULL) return -1; servAddr.sin_family = h->h_addrtype; memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); servAddr.sin_port = htons(port); //Initialize the socket sd = socket(AF_INET, SOCK_STREAM, 0); if(sd<0) return -1; localAddr.sin_family = AF_INET; localAddr.sin_addr.s_addr = htonl(INADDR_ANY); localAddr.sin_port = htons(0); //Bind a local port for recieving data rc = bind(sd, (struct sockaddr *) &localAddr, sizeof(localAddr)); if(rc<0) return -1; //Connect to the remote server rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr)); if(rc<0) return -1; return sd; }