дескриптор сокета как аргумент функции - PullRequest
1 голос
/ 09 июля 2019

Могу ли я передать дескриптор сокета файла в качестве аргумента функции, т.е.

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, который это делает.Мне было интересно, могут ли быть проблемы, которые скрыты при написании кода таким образом

1 Ответ

1 голос
/ 09 июля 2019

Вы можете сделать это абсолютно.Например, 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).

Рекомендуется аккуратно разделить функции, которые создают, используют и закрывают дескриптор файла.

...