套接字描述符作为函数参数

时间:2019-07-09 18:53:55

标签: linux sockets file-descriptor

我可以将文件套接字描述符作为函数参数传递吗,即

void mysend(int fd, uint8_t *data, size_t len)
{
   ...
   sendto(fd, ...);
   ...
}

int main()
{
    int fd = socket(...);
    uint8_t data[5] = {1, 2, 3, 4, 5};
    mysend(fd, data, 5);
    return 0;
}

我已经可以做到这一点。我想知道以这种方式编写代码是否会隐藏一些问题

1 个答案:

答案 0 :(得分:1)

您绝对可以做到。例如,libc做到了:

ssize_t write(int fd, const void *buf, size_t count);
ssize_t read(int fd, void *buf, size_t count);
ssize_t sendto(int sockfd, const void *buf, size_t len, ...);

这些函数可以将套接字描述符作为第一个参数。

关于代码的说明:在return之前,请不要忘记close(fd)

建议您彻底区分创建,使用和关闭文件描述符的功能。