Udostępnij przez


Typ danych gniazda

W aplikacjach Winsock deskryptor gniazda nie jest deskryptorem plików i musi być używany z funkcjami Winsock.

W systemie UNIX deskryptor gniazd jest reprezentowany przez standardowy deskryptor plików. W związku z tym deskryptor gniazd w systemie UNIX może zostać przekazany do dowolnej standardowej funkcji we/wy pliku (na przykład odczytu i zapisu).

Ponadto wszystkie dojścia w systemie UNIX, w tym uchwyty gniazd, są małe, nieujemne liczby całkowite, a niektóre aplikacje zakładają, że będzie to prawdziwe.

Dojścia windows Sockets nie mają żadnych ograniczeń, poza tym, że wartość INVALID_SOCKET nie jest prawidłowym gniazdem. Uchwyty gniazd mogą przyjmować dowolną wartość z zakresu od 0 do INVALID_SOCKET–1.

Ponieważ typ socket jest niepodpisany, kompilowanie istniejącego kodu źródłowego z, na przykład środowisko SYSTEMU UNIX może prowadzić do ostrzeżeń kompilatora o niezgodności typów danych podpisanych/niepodpisanych.

Oznacza to na przykład, że sprawdzanie błędów, gdy gniazdo i akceptują zwracanie funkcji, nie powinno być wykonywane przez porównanie wartości zwracanej z –1 lub sprawdzenie, czy wartość jest ujemna (zarówno typowe, jak i prawne podejścia w systemie UNIX). Zamiast tego aplikacja powinna używać stałej manifestu INVALID_SOCKET zgodnie z definicją w pliku nagłówka Winsock2.h. Na przykład:

Typowy styl BSD UNIX

s = socket(...);
if (s == -1)    /* or s < 0 */
    {/*...*/}

Preferowany styl

s = socket(...);
if (s == INVALID_SOCKET)
    {/*...*/}

Przenoszenie aplikacji gniazd do usługi Winsock

zagadnienia dotyczące programowania winsock