Re[2]: Вызов connect(),send() и прочая из DLL
От: Аноним  
Дата: 15.07.08 18:49
Оценка:
Здравствуйте, 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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.