Winsocks Fehlercode 2
-
Ich habe bei meiner Anwendung den Winsocks Fehlercode 2 zurückgegeben bekommen.
Allerdings findet sich zu diesem nichts bei MSDNHier mein Quellcode:
#include <stdio.h> #include <stdlib.h> #include <crossnet.h> int main(int argc, char *argv[]) { SOCKET sock = create_socket( AF_INET, SOCK_STREAM, 0 ); struct sockaddr_in server; unsigned long addr; // Alternative zu memset() -> bzero() memset( &server, 0, sizeof (server)); addr = inet_addr( argv[1] ); memcpy( (char *)&server.sin_addr, &addr, sizeof(addr)); server.sin_family = AF_INET; server.sin_port = htons(80); // Baue die Verbindung zum Server auf if (connect(sock,(struct sockaddr*)&server, sizeof(server)) < 0) { printf("Error with connect(): %d\n",WSAGetLastError()); } if( (send(sock,"test",sizeof("test"),0)) != -1) { printf("sent successful\n"); } system("Pause"); return 0; }Die Headerdatei crossnet.h ist eine (unfertige) selbstgeschriebene Headerdatei, die cross platform Funktionen zum netzwerken mit Windows und Linux zur Verfügung stellen soll:
//header file for cross-platform networking #ifdef __WIN32__ #include <winsock.h> #endif #ifdef __linux__ #include <sys/types.h> #include <sys/socket.h> #endif void error_exit(const char *string) { #ifdef __WIN32__ printf("%s: %d",string,WSAGetLastError()); #endif #ifdef __linux__ perror(string); #endif exit(-1); } int create_socket(int af, int type, int protocol) { #ifdef __WIN32__ WSADATA *wsadat; if(WSAStartup(MAKEWORD(2,2),wsadat) != 0) { error_exit("WSAStartup() failed"); } #endif int sock; if(sock = socket(af,type,protocol) < 0) { error_exit("socket creating failed"); } return sock; }
-
Wenn WSAStartup fehlschlägt kannst du nicht WSAGetLastError verwenden. WSAStartup schlägt fehl weil wsadat ins nichts zeigt.
-
Habe es jetzt zum laufen bekommen indem ich dem Zeiger mit malloc() Speicher zugewiesen habe. Was gibt es eigentlich für Möglichkeiten um den Fehler auszugeben wenn WSAStartUp fehlschlägt?
-
Der Rückgabewert ist der Winsock-Fehlercode.
Warum nicht einfach auf dem Stack anlegen?
-
Noch ein Fehler, diesmal 10038 bei connect()
Quellcode:
#include <stdio.h> #include <stdlib.h> #include <crossnet.h> int main(int argc, char *argv[]) { SOCKET sock = create_socket( AF_INET, SOCK_STREAM, 0 ); con(sock,AF_INET,"127.0.0.1",80); if( (send(sock,"test",sizeof("test"),0)) != -1) { printf("sent successful\n"); } system("Pause"); return 0; }Und die Headerdatei:
//header file for cross-platform networking #ifdef __WIN32__ #include <winsock.h> #endif #ifdef __linux__ #include <sys/types.h> #include <sys/socket.h> #endif void error_exit(const char *string) { #ifdef __WIN32__ printf("%s: %d",string,WSAGetLastError()); #endif #ifdef __linux__ perror(string); #endif exit(-1); } int create_socket(int af, int type, int protocol) { #ifdef __WIN32__ int err; LPWSADATA wsadat = (LPWSADATA) malloc(sizeof(LPWSADATA)); //LPWSADATA = wsadat* ==> malloc() if(WSAStartup(MAKEWORD(2,2),wsadat) != 0) { printf("WSAStartup() failed"); exit(-1); } #endif int sock; if(sock = socket(af,type,protocol) < 0) { error_exit("socket creating failed"); } return sock; } void con(int socket, int af, const char *ip, int port) { struct sockaddr_in server; unsigned long addr = inet_addr(ip); memset( &server, 0, sizeof (server)); //needed? memcpy((char *) &server.sin_addr, &addr, sizeof(addr)); server.sin_family = af; server.sin_port = htons(port); if(connect(socket, (struct sockaddr *)&server, sizeof(server)) != 0) { error_exit("connect() failed"); } }
-
Weiß keiner, woran es liegen könnte?