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

socket descriptor as a function argument

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

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;
}

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

你绝对可以做到。例如 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)

建议您将创建、使用和关闭文件描述符的函数完全分开。