WinSockとバークレーソケット
- UNIXのバークレーソケットはint型、WinsockのソケットはSOCKET型(実態は整数型)。
- UNIXではソケットはファイルディスクリプタと同様に扱えるためread⁄write&closeを使用出来るが、Winsockはrecv⁄send&closesocketを使用する。
- エラー定数が異なる。
両プラットフォームで使えるようにする対応策としては
#ifdef WIN32 #include<windows.h> #include<winsock.h> #define perror(_Z) fprintf(stderr, "%s error\n", _Z) #define herror(_Z) fprintf(stderr, "%s error\n", _Z) #define exit(_Z) WSACleanup();exit(_Z) #define close(_Z) closesocket(_Z) #else #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa.h> #include<netdb.h> #endif ~~ (関数内で) #ifdef WIN32 WSADATA wsaData; if(WSAStartup0x0101, &wsaData) != 0) { fprintf(stderr, "Winsock error\n"); exit(1); } #endif ~~ socket---bind---listen---accept---resv/send---close(server) | -----------------connect---resv/send---close(client) 参考:村山公保『基礎からわかるTCP/IP ネットワークコンピューティング入門』