我正在使用write()函数写入C中的套接字。我不是C专家,有时我知道这个函数可能会失败,在这种情况下它可以返回某种SIGPIPE。
这是我现在使用的简单代码:
if(write(sockfd, sendline, sizeof(sendline)) < sizeof(sendline))
{
printf("Failed to write string %s to socket" , sendline);
return NULL;
}
我的问题是,在使用此功能时,如何正确管理这类错误(SIGPIPE等)?
答案 0 :(得分:4)
就“如何处理错误”而言,您需要检查write()
的返回值是否为-1
,然后如果要区分错误条件,请查看{的值{1}}。
在errno
的特定情况下,如果尝试写入读取结束的套接字,则将其传递给进程。默认情况下,SIGPIPE
的传递将导致进程终止。如果您不想要此行为,则需要明确忽略SIGPIPE
(SIGPIPE
),然后signal(SIGPIPE, SIG_IGN)
来电将返回write()
和-1
将等于errno
。