C - 无法绑定(bind)服务器套接字

标签 c windows sockets localserversocket

我正在用 C 编写一个本地客户端-服务器应用程序,在 64 位 Windows 7 计算机上运行。

我的问题是,当我为服务器套接字调用bind()时,它总是返回-1,我似乎不明白为什么。在调用bind()之前,我尝试将setsockopt与SO_REUSEADDR一起使用,但最终什么也没做,所以我将其删除。我还尝试将 INADDR_ANY 更改为 inet_address("127.0.0.1") 和 inet_address(我的电脑的 ipv4),但这也不起作用。

这是服务器套接字设置的代码:

SOCKET serverSocket;

//AF_UNIX for process communication
serverSocket = socket(AF_UNIX, SOCK_STREAM, 0);

struct sockaddr_in serverAddress;

serverAddress.sin_family = AF_UNIX;
serverAddress.sin_port = htons(10509);
serverAddress.sin_addr.s_addr = INADDR_ANY;

// always returns -1, no matter what I do.
if (bind(serverSocket, (LPSOCKADDR) &serverAddress, sizeof(serverAddress)) == -1)
{
    int result = MessageBoxA(NULL, "Failed to set up server. Continue?", "Server Error", MB_YESNO | MB_SYSTEMMODAL);

    closesocket(serverSocket);

    if (result == IDNO)
        exit(1);
    else
        goto cleanup;
}

...

为什么会发生这种情况?我可以做什么来修复它?

最佳答案

AF_UNIX 套接字在 Windows 7 上不可用。如果您想在进程之间进行通信,只需更改为 127.0.0.1 上的 AF_INET 套接字即可。

关于C - 无法绑定(bind)服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53250646/

相关文章:

c - 加倍动态堆栈数组

c++ - 驱动器号重复

windows - 编写 Windows NT 子系统

Java 套接字在许多并发连接期间意外关闭

c++ - 在包含防护中使用 #error 指令

c - argc/argv 影响数组中的空字节?

c# - RegOpenKeyEx 返回错误路径名错误(代码 161)

spring - java.net.SocketException : Unexpected end of file from server using Spring's RestTemplate 异常

java - 为什么我会收到 CancelledKeyException?

C编程,通过udp发送wav文件