【问题标题】:How to properly use the write() function for sockets?如何正确使用套接字的 write() 函数?
【发布时间】:2010-02-05 11:04:46
【问题描述】:

我正在使用write() 函数写入 C 中的套接字。我不是 C 专家,有时我知道这个函数可能会失败,在这种情况下它会返回某种 SIGPIPE。

这是我现在使用的简单代码:

if(write(sockfd, sendline, sizeof(sendline)) < sizeof(sendline))
    {
        printf("Failed to write string %s to socket" , sendline);
        return NULL;
    }

我的问题是,在使用此功能时如何正确管理这些错误(SIGPIPE 等)?

【问题讨论】:

    标签: c sockets error-handling


    【解决方案1】:

    至于“如何处理错误”,你需要检查write()的返回值是-1,然后如果你想区分错误情况看errno的值。

    SIGPIPE 的特定情况下,如果尝试写入读取端已关闭的套接字,则会将其传递给进程。默认情况下,SIGPIPE 的传递将导致进程终止。如果你不想要这种行为,那么你需要明确地忽略SIGPIPE (signal(SIGPIPE, SIG_IGN)),然后write() 调用将返回-1errno 将等于EPIPE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 2019-05-05
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多