|
아래 소스내용중에서 아래부분의 WSAWaitForMultipleEvents 함수호출시 황천포로 빠져서 아무 응답이 없습니다.
이 문제를 경험하신 분들께 답변 구합니다. -> 아주 중요한 이슈입니다.
참고로 VC++에서는 실행이 잘됩니다. 볼랜드 C++B에서의 winsock호환 문제인지 알고싶습니다.
#pragma comment (lib,"ws2_32.lib")
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#include <process.h>
#include <vcl.h>
void __fastcall TForm1::BitBtn6Click(TObject *Sender)
{
WSADATA wsaData;
SOCKET hServSock;
SOCKADDR_IN servAddr;
SOCKET hSockArray[WSA_MAXIMUM_WAIT_EVENTS];
SOCKET hClntSock;
int clntLen;
SOCKADDR_IN clntAddr;
WSAEVENT hEventArray[WSA_MAXIMUM_WAIT_EVENTS];
WSAEVENT newEvent;
WSANETWORKEVENTS netEvents;
int sockTotal=0;
int index, i;
char message[BUFSIZE];
int strLen;
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) /* Load Winsock 2.2 DLL */
_ErrorHandling(-1, "WSAStartup() error!");
hServSock = socket(PF_INET, SOCK_STREAM, 0);
if(hServSock==INVALID_SOCKET)
_ErrorHandling(-1, "socket() error");
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(LSNRPORT);
if(bind(hServSock, (struct sockaddr *) &servAddr, sizeof(servAddr))==SOCKET_ERROR)
_ErrorHandling(-1, "bind() error");
newEvent = WSACreateEvent();
if(WSAEventSelect(hServSock, newEvent, FD_ACCEPT)==SOCKET_ERROR)
_ErrorHandling(-1, "WSAEventSelect() error");
if(listen(hServSock, 5)==SOCKET_ERROR)
_ErrorHandling(-1, "listen() error");
hSockArray[sockTotal]=hServSock;
hEventArray[sockTotal]=newEvent;
sockTotal++;
//WSAAsyncSelect(hSockArray[0], this->Handle, WM_USER + 10, FD_READ | FD_WRITE | FD_CONNECT);
while(1)
{
index = WSAWaitForMultipleEvents(sockTotal, hEventArray, FALSE, WSA_INFINITE, FALSE);
index = index-WSA_WAIT_EVENT_0;
/*
for(i=index; i<sockTotal; i++) {
{
*/
}
WSACleanup();
}
|