在Linux中创建套接字时获取错误代码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Linux中创建套接字时获取错误代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1709字,纯文字阅读大概需要3分钟。
内容图文
我正在Linux中进行一些套接字编程,我想知道如何在函数套接字(…)时获取错误代码;失败.
例如,对于“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设置为适当的错误号.我怎么访问这个“错误”?
到目前为止这是我的代码:
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是一个线程局部全局变量,在<errno.h>中定义.许多库函数的手册页将指示它们在出错时返回-1,并设置errno.
您可以使用strerror函数将errno值转换为有用的字符串.
通常,您应该像这样编码:
#include <stdio.h>
#include <errno.h>
int main(void) {
int s;
s = socket(...);
if (s < 0) {
fprintf(stderr, "socket() failed: %s\n", strerror(errno));
exit(1);
}
}
或者,glibc的printf和朋友支持%m格式说明符,它被替换为strerror(errno)(不需要参数).所以上面的例子可以替换为:
if (s < 0) {
fprintf(stderr, "socket() failed: %m\n");
exit(1);
}
为了使它更简单,有perror功能,它打印出类似于上面的消息.
if (s < 0) {
perror("socket");
exit(1);
}
把它全部包装好 – 错误处理不需要复杂和冗长.将套接字调用和测试放在<在一个语句中0,上面的代码看起来像这样,你将是一个真正的UNIX专业人士:
#include <stdio.h>
#include <errno.h>
int main(void) {
int s;
if ((s = socket(...)) < 0) {
perror("socket");
exit(1);
}
}
内容总结
以上是互联网集市为您收集整理的在Linux中创建套接字时获取错误代码全部内容,希望文章能够帮你解决在Linux中创建套接字时获取错误代码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。