Can't create socket on Windows

后端 未结 3 1617
猫巷女王i
猫巷女王i 2021-02-15 12:53

I have quite an embarrassing problem. The following code simply will not create a socket on Windows; it fails and displays the error message. Could anyone briefly explain why th

相关标签:
3条回答
  • 2021-02-15 13:07

    Jerry Coffin is right about WSAStartup() and WSACleanup().

    Also note that this code

    if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
    

    is problematic because SOCKET is an unsigned type (unsigned int).

    From winsock.h

    /*
     * This is used instead of -1, since the
     * SOCKET type is unsigned.
     */
    #define INVALID_SOCKET  (SOCKET)(~0)
    #define SOCKET_ERROR            (-1)
    

    So, IMO it's better to replace that line with

    if( INVALID_SOCKET == (sock = socket(AF_INET, SOCK_STREAM, 0)) )
    

    even if it's not the root cause.

    0 讨论(0)
  • 2021-02-15 13:20

    An Example:

    #include <Windows.h>
    #include <stdio.h>
    
    #pragma comment(lib,"ws2_32.lib")
    
    int _cdecl main(){
       WSADATA Data;
       int socket; // or you can use SOCKET socket
       WSAStartup(MAKEWORD(2, 2), &Data); // 2.2 version
       socket = socket(AF_INET, SOCK_DGRAM, 0);
       if(udep_socket<0){
            printf("Error Creating Socket");
       }else{
            printf("Successfully Created Socket");
       }
       system("pause");
       return 0;
    }
    
    0 讨论(0)
  • 2021-02-15 13:23

    You need to call WSAStartup() before any other socket functions will work on Windows (and you're supposed to call WSACleanup() when you're done).

    0 讨论(0)
提交回复
热议问题