Разрешено ли сокетам быть глобальными в C? - PullRequest
0 голосов
/ 05 мая 2018

Я делаю программу, которая постоянно проверяет получение и отправку данных через сокет, и у меня есть сокет, объявленный глобально, и он используется внутри двухпоточных функций. Я устанавливаю сокет в main (), и один поток использует recvfrom, используя сокет, и это прекрасно работает, но всякий раз, когда я пытаюсь вызвать sendto, он возвращает значение <0, что меня смущает, так как recvfrom работает нормально. </p>

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Сокет - это просто класс файлового дескриптора, который в C представлен значением int. Здесь важно значение , которое вы сохраняете для сокета (оно заполняется при первом вызове socket(2) и не изменяется, пока вы не освободите его в ядре с помощью close(2)). В качестве значения, предоставленного системой, оно сохраняется до тех пор, пока вы не освободите его с помощью close(2) или процесс не прекратится (любым способом). Место, где вы храните это значение (глобальная, статическая или автоматическая переменная), не имеет значения.

Итак, наконец, ответ: да .

0 голосов
/ 05 мая 2018

Разрешено ли сокетам быть глобальными в C?

Да.

...