Winsocks Fehler 10038 (WSAENOTSOCK) geschlossen 

Status
Für weitere Antworten geschlossen.

9999

Registered +
Registriert
Mai 2007
Beiträge
690
Der Quellcode:

PHP:
#include 
#include 
#include 

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;
}

Die headerdatei crossnet.h:

PHP:
//header file for cross-platform networking


#ifdef __WIN32__
#include 
#endif

#ifdef __linux__
#include types.h>
#include 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");
}
}
 
Ich kann es mir schon denken.
Er bekommt die Fehlermeldung 10038.

Die Gründe dafür können sein:
- socket belegt
- das was er für einen socket hält ist keiner

Mal den socket wechseln?
(was anderes als 127.0.0.1)
 
wasawasa schrieb:
Er bekommt die Fehlermeldung 10038.

Stimmt

wasawasa schrieb:
- das was er für einen socket hält ist keiner

Versteh ich jetzt so nicht ganz

wasawasa schrieb:
Mal den socket wechseln?
(was anderes als 127.0.0.1)

Soeben probiert, kommt aber leider der selbe Fehler

Broken Sword schrieb:
9999 drücke dich besser bzw. umfangreicher aus, wenn du willst, dass dir schnell geholfen wird - als Stammuser sich wie ein Neuling aufzuführen..

Sorry, ich dachte es wäre so verständlich
 
Zuletzt bearbeitet von einem Moderator:
Therdtitel geändert. => edited

9999 drücke dich besser bzw. umfangreicher aus, wenn du willst, dass dir schnell geholfen wird - als Stammuser sich wie ein Neuling aufzuführen..

Gruß
Broken Sword
 
Weiß keiner woran es liegen könnte?

Edit: Fehler gefunden, die if Zeile bei sock funktionierte so nicht, habe jetzt die Zuweisung (sock = socket usw.) und die Überprüfung ob der socket valide ist in zwei Zeilen aufgesplittet
 
Zuletzt bearbeitet von einem Moderator:
Habs auch gerade gefunden.
Sorry, leider etwas zu spät.
Aber der Fehler ist gut getarnt.
Ich habe (zu) lange gebraucht um zu sehen warum die Variable immer 0 ist ...

Eine korrekte Klammerung hätte es auch getan:
if ((sock = socket(af,type,protocol)) < 0)

Ich wollte nur noch mal schreiben warum das so ist:
Bei der Zeile if(sock = socket(af,type,protocol) < 0) gibt es keine Klammerung.
Darum zieht die normale Priorität der C++ Operatoren und da liegt "Das Ergebnis ist ein Bool (-1,0). Und das wird der Variable sock zugewiesen

Ach ja, um meiner Rechthaberei zu fröhnen - ich hatte mit der Aussage "- das was er für einen socket hält ist keiner" recht.

Code:
[U]Level Operator Description[/U]
1 :: scope
2 () [] . -> ++ -- cast typeid postfix
3 ++ -- ~ ! sizeof new delete unary (prefix)
* & indirection and reference (pointers)
+ - unary sign operator
4 (type) type casting
5 .* ->* pointer-to-member
6 * / % multiplicative
7 + - additive
8 > shift
9 < > = relational
10 == != equality
11 & bitwise AND
12 ^ bitwise XOR
13 | bitwise OR
14 && logical AND
15 || logical OR
16 ?: conditional
17 = *= /= %= += -= >>= 18 , comma
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten