|
分類:[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;
}
|