Здравствуйте, Stuw, Вы писали:
S>Здравствуйте, quolian, Вы писали:
Q>>Здравствуйте! Есть dll'ка , которая имеет простую функцию посылки сообщений через сокеты. Она замечательно работает, но есть одна серьёзная проблема: если хост, к которому нужно приконнектиться не доступен, функции connect и send НЕ возвращают SOCKET_ERROR , то есть можно сказать "делают вид" =) ,что всё хорошо. Как заставить их работать по человечески? =)
Q>>Спасибо!
S>Что за dll? доступны ли ее исходники?
S>з.ы. представьте себя на месте отвечающего. попробуйте по исходным данным понять, что не так, и предложить ответ.
S>з.з.ы. предположение: мож как-то связано с неблокирующим режимом сокетов?
dll самопальная,пробовал и блокирующий и не блокирующий режимы , если надо,завтра выложу исходник, но в общем то , когда я пробовал разные варианты , последнее что я сделал, это копи-паст с MSDN =) то есть в главной функции:
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
//----------------------
// Create a SOCKET for connecting to server
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}
//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
clientService.sin_port = htons( 27015 );
//----------------------
// Connect to server.
if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return;
}
printf("Connected to server.\n");
WSACleanup();
return;