我试图在 mingw 上创建一个 UDP 套接字,但是 socket()
返回 -1
, 错误号 = 0
.奇怪的。
我已经包含了 winsock2.h。
最初我有编译错误 undefined reference to socket@12
, 设置后-lws2_32
和 -lwsock32
到 Code::Block 的链接器设置,编译成功。
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
RDF_LOG(kDEBUG, "sockfd %d ", sockfd);
if (sockfd < 0){
RDF_LOG(kERROR, "ERROR: %s , errno %d\n", strerror(errno), errno);
}
结果-->
socks -1
错误:没有错误,错误号为 0
好的,我将 RDF_LOG 改为 fprintf。
int tmp = 0;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
tmp = errno;
fprintf(stderr, "sockfd %d ", sockfd);
if (sockfd < 0){
fprintf(stderr, "socket: %s , errno %d\n", strerror(tmp), tmp);
}
返回的结果仍然是 --> sockfd -1 socket: No error , errno 0
mingw 有可能不支持 errno 吗??
最佳答案
我要做的第一件事是:
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
int tmp = errno;
RDF_LOG(kDEBUG, "sockfd %d ", sockfd);
if (sockfd < 0){
RDF_LOG(kERROR, "ERROR: %s , errno %d\n", strerror(tmp), tmp);
}
我不知道是什么
RDF_LOG
可能正在做的errno
变量,这会告诉你它是否改变了它。另一件需要注意的事情是您已经成功地执行了您的
WSAStartup
.以下最小程序应该会向您展示如何执行此操作,并提供调试的起点:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <winsock2.h>
int main (void) {
WSADATA wsaData;
int listenFd;
if (WSAStartup(MAKEWORD(1,1), &wsaData) == SOCKET_ERROR) {
printf ("Error initialising WSA.\n");
return -1;
}
listenFd = socket (AF_INET, SOCK_STREAM, 0);
if (listenFd < 0) {
printf ("Error %d opening socket.\n", errno);
return -1;
}
return 0;
}
关于c - socket() 返回 -1 但 errno 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962531/