Socket Listen()
-
Hallo,
versuche mich grade ein wenig in Sockets einzuarbeiten, jedoch komm ich nicht über den Befehl "listen()" hinaus, weil mein Programm an dieser Stelle abbricht.
#include <stdio.h> #include <winsock.h> int main() { { WSADATA wsa; if(WSAStartup(MAKEWORD(1, 1), &wsa)) { printf("WSAStartup() failed!"); return -1; } } int sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == -1) { perror("socket() failed!"); return -1; } int sockListen = listen(sock, 3); if(sockListen == -1) { perror("listen() failed!"); return -1; } /* struct sockaddr_in { short int sin_family; // AF_INET unsigned short int sin_port; // Port-Nummer struct in_addr sin_addr; // IP-Adresse };*/ struct sockaddr cli; int cli_size; for(;;) { int c = accept(sock, &cli, &cli_size); printf("%n", c); } // close(sock); //getchar(); system("PAUSE"); return 0; }
"sockListen.exe": "C:\Users\Jonas\Documents\Visual Studio 2008\Projects\sockListen\Debug\sockListen.exe" geladen, Symbole wurden geladen.
"sockListen.exe": "C:\Windows\SysWOW64\ntdll.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\kernel32.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\wsock32.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\ws2_32.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\msvcrt.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\advapi32.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\rpcrt4.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\secur32.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\nsi.dll" wurde geladen
"sockListen.exe": "C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcr90d.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\mswsock.dll" wurde geladen
"sockListen.exe": "C:\Windows\SysWOW64\WSHTCPIP.DLL" wurde geladen
Das Programm "[3464] sockListen.exe: Systemeigen" wurde mit Code -1 (0xffffffff) beendet.Hilfe
MfG
J
-
Bei sowas hilft immer sich die Fehlermeldung ausgeben zu lassen.
Schau dir dazu FormatMessage an http://msdn.microsoft.com/en-us/library/ms679351(VS.85).aspx (ganz unten sind ein paar Beispiele).Edit: für Sockets musst du WSAGetLastError benutzen http://msdn.microsoft.com/en-us/library/ms741580(VS.85).aspx.
Der Rückgabewert von socket ist INVALID_SOCKET, nicht -1 (ok, möglich, dass es als -1 definiert ist).
-
Also WSAGetLastError() gibt den Fehlercode 10022 zurück:
WSAEINVAL
10022Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.
-
listen kannst du nur ausführen, wenn du bind zuvor für den socket benutzt hast.
siehe z.b. http://msdn.microsoft.com/en-us/library/ms739168(VS.85).aspx
-
Danke für die Hilfe, hab mein Programm immerhin schonmal ans "horchen" bekommen ^^