套接字描述符作为函数参数
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)
。
建议您将创建、使用和关闭文件描述符的函数完全分开。
我可以将文件套接字描述符作为函数参数传递吗,即
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)
。
建议您将创建、使用和关闭文件描述符的函数完全分开。