【发布时间】:2014-11-24 02:23:28
【问题描述】:
我正在 Linux 中进行一些套接字编程,并且想知道如何在函数 socket(...); 时获取错误代码。失败。
例如对于“getaddrinfo”功能,我可以这样做:
//Resolve the server address and port
result = (struct addrinfo *) calloc(1, sizeof(struct addrinfo));
iResult = getaddrinfo("google.com", DEFAULT_PORT, &hints, &result);
if (iResult != 0){
printf("%d\n", iResult);
fprintf(stderr, "getaddrinfo failed: %s\n", gai_strerror(iResult));
getchar();
exit(EXIT_FAILURE);
}
但是我想使用 socket(...) 函数做类似的事情。
据此: http://linux.die.net/man/2/socket
该函数在失败时返回 -1,并将 errno 设置为适当的错误号。我如何访问这个“errno”? 到目前为止,这是我的代码:
int connectSocket = 0;
connectSocket = socket(AF_INET, SOCK_STREAM, 0);
printf("%d\n", connectSocket);
if (connectSocket == -1){
printf("socket failed with error: %s\n", error_string); //TODO: HELP DECLARING error_string
getchar();
exit(EXIT_FAILURE);
}
【问题讨论】:
-
参见
errno(3)和strerror(3)手册页。 -
不要为您在
getaddrinfo()的最后一个参数中传递的addrinfo分配内存。它将为您分配addrinfo,您将其传递给freeaddrinfo()以释放它:result = NULL; iResult = getaddrinfo(..., &result); if (iResult == 0) { ...; freeaddrinfo(result); }