winsock(wsock32.dll)とwinsock2(ws2_32.dll)の違いについて

この情報はChatGPTの力も使ってまとめたものです。本来はMSDNからすべてのマニュアルやエビデンスを見つけ、読み込んだ上でまとめたかったが、特にWinsockについては情報が古くい公式のマニュアルも見つけられずにて、自分に文章力もなかったため、これまでまとめきれていませんでした。AIの力はすごい。ChatGPT(AI)の出力結果は現時点でまだ不完全かもしれないが、それでもすごい。ここでまとめた内容については、これまでwinsockにかかわってきた自分としては、感覚的だが間違いないと思います。VBA界隈だと、winsockとwinsock2が混在していて個人的にも混乱していたので勉強になりました。自分のサンプルプログラムも見直さないと。

wsock32.dll と ws2_32.dll の違い

wsock32.dllとws2_32.dllは、Winsock APIを実装するWindowsのダイナミックリンクライブラリ(DLL)です。しかし、両者にはいくつかの重要な違いがあります。

wsock32.dllは、最初のWinsock APIの実装であり、Windows 95およびWindows NT 4.0で使用されました。ws2_32.dllは、Windows 98、Windows 2000、およびWindows XPで導入され、IPv6などの新しい機能をサポートしています。

以下は、wsock32.dllとws2_32.dllの主な違いです。

IPv6サポート
wsock32.dllは、IPv4のみをサポートしています。一方、ws2_32.dllはIPv4とIPv6の両方をサポートしています。IPv6は、IPアドレスが枯渇する問題に対処するために設計された、より高度なIPプロトコルです。

拡張セキュリティ
ws2_32.dllは、拡張セキュリティをサポートしています。この機能は、Windows Vistaで導入されました。拡張セキュリティを使用すると、Winsock APIを使用するアプリケーションが、Windowsのファイアウォールやその他のセキュリティ機能との統合が容易になります。

関数の変更
一部のWinsock関数は、ws2_32.dllで異なる形式になっています。たとえば、sendto関数のバッファー引数は、ws2_32.dllでconstキーワードが追加されました。

関数の増加
ws2_32.dllには、wsock32.dllには存在しない新しい関数が多数あります。これらの関数には、getaddrinfo、getnameinfo、WSASend、WSARecvなどが含まれます。これらの関数は、より高度なネットワークプログラミング機能を提供します。

したがって、IPv6を使用したり、拡張セキュリティを必要とする場合は、ws2_32.dllを使用する必要があります。ただし、Winsock APIを使用するアプリケーションがWindows 95またはWindows NT 4.0をサポートする場合は、wsock32.dllを使用する必要があります。

ws2_32.dllに定義された関数

ws2_32.dllには、Winsock2 APIの関数が多数定義されています。以下に一部の主な関数をリストアップします。

  • accept
  • bind
  • closesocket
  • connect
  • getaddrinfo
  • gethostbyaddr
  • gethostbyname
  • getnameinfo
  • getpeername
  • getprotobyname
  • getprotobynumber
  • getservbyname
  • getservbyport
  • getsockname
  • getsockopt
  • htonl
  • htons
  • inet_addr
  • inet_ntoa
  • ioctlsocket
  • listen
  • ntohl
  • ntohs
  • recv
  • recvfrom
  • select
  • send
  • sendto
  • setsockopt
  • shutdown
  • socket
  • WSAAsyncGetHostByAddr
  • WSAAsyncGetHostByName
  • WSAAsyncSelect
  • WSACleanup
  • WSAConnect
  • WSAEventSelect
  • WSAGetLastError
  • WSARecv
  • WSARecvFrom
  • WSASend
  • WSASendTo
  • WSAStartup

これらの関数は、Winsock2 APIを使用してTCP/IP通信を実行するために必要な機能を提供しています。それぞれの関数の詳細な使い方やパラメーターに関する情報は、公式のWinsock2 APIドキュメントを参照することをお勧めします。

ws2_32.dll(Winsock2 API)のドキュメント

公式のWinsock2 APIドキュメントは、Microsoft Developer Network(MSDN)にホストされています。以下のリンクからアクセスできます。

Windows Sockets 2 - Win32 apps
Windows Sockets 2 (Winsock) enables programmers to create advanced Internet, intranet, and other network-capable applications to transmit application data acros...

このページには、Winsock2 APIの概要、使用方法、関数、構造体、列挙体、マクロ、およびその他のリソースが含まれています。また、各関数のシグニチャやパラメーターの説明、戻り値に関する情報なども提供されています。

wsock32.dllに定義された関数

wsock32.dllは、古いバージョンのWinsock APIを含むDLLで、Windows 95およびWindows NT 4.0以前で使用されていました。以下は、wsock32.dllに含まれる一部の主要な関数のリストです。

  • accept
  • bind
  • closesocket
  • connect
  • gethostbyaddr
  • gethostbyname
  • gethostname
  • getpeername
  • getprotobyname
  • getprotobynumber
  • getservbyname
  • getservbyport
  • getsockname
  • getsockopt
  • htonl
  • htons
  • inet_addr
  • inet_ntoa
  • ioctlsocket
  • listen
  • ntohl
  • ntohs
  • recv
  • recvfrom
  • select
  • send
  • sendto
  • setsockopt
  • shutdown
  • socket

これらの関数は、TCP/IP通信に必要な機能を提供するために使用されます。ただし、wsock32.dllは非推奨であり、古いバージョンのWindowsでしかサポートされていないため、現代的なアプリケーションでは使用されません。代わりに、新しいバージョンのWinsock2 APIを使用することをお勧めします。

wsock32.dll(Winsock API)のドキュメント

公式のwsock32.dllに関するAPIドキュメントは、Microsoft Developer Network (MSDN)にホストされていましたが、現在はWindows 95およびWindows NT 4.0がサポートされていないため、公式には提供されていません。ただし、インターネット上には、古いWinsock APIおよびwsock32.dllに関する情報が入手可能なウェブサイトやフォーラムが存在することがあります。

ただし、wsock32.dllが非推奨であり、現代的なアプリケーションでは使用されなくなっているため、新しいバージョンのWinsock2 APIを使用することをお勧めします。Winsock2 APIに関する情報は、Microsoftの公式ドキュメントで入手できます。また、上記の回答でも紹介したMSDNのページにアクセスすることで、Winsock2 APIのドキュメントを参照することができます。

コメント

タイトルとURLをコピーしました