НЕ ставиться таймаут на recvfrom!

Тема в разделе "WASM.NETWORKS", создана пользователем ZeroMemory, 23 янв 2005.

  1. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    делаю

    int timeout = 1000;

    setsockopt(sockRaw, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));



    чтобы таймаут созданному сокету поставить, потом вызываю



    recvfrom(sockRaw, recvbuf, MAX_PACKET, 0, (struct sockaddr*)&from, &fromlen);



    и если нет ответа то прога подвисает (типа ждет), хотя я ставил таймаут... В чем тут дело, помогите плз.
     
  2. ganes

    ganes New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2004
    Сообщения:
    62
    Адрес:
    Ukraine
    А накой ты свой int timeout в CharЫ переводешь, бяка явно

    какаято, да еще и размер тамоута, там вроде как сокаддр_ин

    структура походу должна передаваться...
     
  3. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    ZeroMemory

    В показанном тобой коде все в порядке, т.е. его не достаточно для понимания причин проблемы.



    ganes

    int timeout в CharЫ переводешь

    Тебе ни о чем не говорит использование в коде * и &?
     
  4. ZeroMemory

    ZeroMemory New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    79
    Я вроди как и сам вижу, что вроди все ок, но не работает, что тут поделаешь... Ну в принципе я уже решил эту проблему, использовав таймаут в select() ;)



    Всем спасибо.
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    ZeroMemory

    решил эту проблему

    Хорошо.



    использовав таймаут в select

    Цитата из Socket Options for Windows NT and Windows Me/98/95 (Windows Sockets Version 2: Platform SDK): "Details on SO_SNDTIMEO and SO_RCVTIMEO

    These two options set up time-outs for the send, sendto, recv, and recvfrom functions. You can obtain the same functionality by calling select with a time-out just before the I/O call, but these options offer a significant improvement in performance by avoiding a kernel transition and the other overhead of the select call. For any code whose performance is very critical, applications should use these time-out options rather than select.
    "