相关疑难解决方法(0)

连接套接字上的read()函数可以返回零字节吗?

我知道read()是一个阻塞调用,除非我使套接字无阻塞.所以我希望read()调用请求4K数据应该返回一个正值(没有读取的字节数)或错误的-1(客户端可能的连接重置等).我的问题是:read()可以在任何场合返回'0'吗?

我这样处理read():

   if ((readval = read(acceptfd, buf, sizeof(buf) - 1)) < 0)
    {

    }
    else
    {
       buf[readval] = 0;
       //Do some thing with data  
    }
Run Code Online (Sandbox Code Playgroud)

如果read()返回零,这段代码就会爆炸,我知道如何修复它.但是read()有可能返回零吗?

sockets linux network-programming tcp runtime-error

28
推荐指数
1
解决办法
4万
查看次数

如果使用Ctrl + c关闭客户端,服务器将在"send"中死亡

我无法理解为什么这个应用程序死了send.这是服务器的代码:

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <stdlib.h>
#include <errno.h>

#define UNIX_PATH_MAX    108
#define SPATH "./sock"

int main() {
    int sfd, rv = 100, newfd;
    char b[100];
    char ok[3] = "ok\0";
    struct sockaddr_un sa;

    sfd = socket(AF_UNIX, SOCK_STREAM, 0);

    strncpy(sa.sun_path, SPATH, UNIX_PATH_MAX);
    sa.sun_family = AF_UNIX;

    if (bind(sfd, (struct sockaddr*)&sa, sizeof(sa)) == -1) {
        perror("bind");
        exit(EXIT_FAILURE);
    }

    if (listen(sfd, SOMAXCONN) == -1) {
        perror("listen");
        exit(EXIT_FAILURE);
    }

    if ((newfd = accept(sfd, NULL, NULL)) == -1) {
        perror("accept"); …
Run Code Online (Sandbox Code Playgroud)

c sockets send

4
推荐指数
1
解决办法
7749
查看次数

标签 统计

sockets ×2

c ×1

linux ×1

network-programming ×1

runtime-error ×1

send ×1

tcp ×1