Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В приложениях Winsock дескриптор сокета не является дескриптором файла и должен использоваться с функциями Winsock.
В UNIX дескриптор сокета представлен стандартным дескриптором файла. В результате дескриптор сокета в UNIX может быть передан любому из стандартных функций ввода-вывода файлов (например, для чтения и записи).
Кроме того, все дескрипторы в UNIX, включая дескриптор сокетов, являются небольшими, неотрицательных целыми числами, а некоторые приложения делают предположения о том, что это будет верно.
Дескриптор сокетов Windows не имеет ограничений, кроме того, что значение INVALID_SOCKET не является допустимым сокетом. Дескриптор сокета может принимать любое значение в диапазоне от 0 до INVALID_SOCKET–1.
Так как тип сокета не указан, компиляция существующего исходного кода из среды UNIX может привести к предупреждениям компилятора о несоответствиях типов данных со знаком или без знака.
Это означает, например, что проверка ошибок при сокете и принимать возвращаемые функции не следует путем сравнения возвращаемого значения с –1 или просмотра отрицательного значения (как общих, так и юридических подходов в UNIX). Вместо этого приложение должно использовать константу манифеста INVALID_SOCKET, как определено в файле заголовка Winsock2.h. Например:
Стандартный стиль BSD UNIX
s = socket(...);
if (s == -1) /* or s < 0 */
{/*...*/}
Предпочтительный стиль
s = socket(...);
if (s == INVALID_SOCKET)
{/*...*/}
Связанные разделы