|  | 分類:[C/C++]
 
 
 お世話になります。とまとです。
開発環境:Win2000、VC++6.0
ある特定ポート(例:5555)が使用されているかを、以下のソースを使ってチェックしようとしています。
ポートが使われていれば
if (bind(ListenSocket, (SOCKADDR*)&service, sizeof(service))
            == SOCKET_ERROR)
の箇所でエラーに入ります。
Win2000・XPではポートが使われていればエラーになるのですが、Vista・Win7ではエラーになりません。
(ポートは使用されています:netstatでも確認してあります)
Vista・win7では何かが必要なのでしょうか?
ご教授お願いします。
---ソース---
#include <stdio.h>
#include "winsock2.h"
int main()
{
    /*
     * 変数の宣言。
     */
    WSADATA wsaData;
    int iResult = 0;
    SOCKET ListenSocket;
    struct sockaddr_in service;
    /*
     * Winsockの初期化。
     */
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != NO_ERROR)
    {
        printf("Error at WSAStartup()\n");
        return 0;
    }
    /*
     * 接続要求受入用のリスニング用のソケットを作成。
     */
    ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ListenSocket == INVALID_SOCKET)
    {
        printf("Error at socket(): %ld\n", WSAGetLastError());
        WSACleanup();
        return 0;
    }
    /*
     * そのsockaddr_in構造体はそのアドレスファミリィを指定する、
     * IPアドレス、そして、結びつけられているソケットのためのポート。
     */
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = inet_addr("127.0.0.1");
    service.sin_port = htons(5555);
    /*
     * ソケットをバインドする。
     */
    if (bind(ListenSocket, (SOCKADDR*)&service, sizeof(service))
            == SOCKET_ERROR)
    {
        printf("bind() failed.\n");
        closesocket(ListenSocket);
        return 0;
    }
    WSACleanup();
    return 0;
}
 |