На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Нет возврата из функции accept
      После вызова accept не возвращается управление в программу. По крайней мере, не выводится на экран сообщение, следующее за вызовом этой функции. Почему?

      ExpandedWrap disabled
        // MyConsoleServer.cpp : Defines the entry point for the console application.
        //
        //#pragma comment (lib, "wsock32.lib")
         
        #include "stdafx.h"
        #include <conio.h>
        #include <winsock2.h>
         
        int _tmain(int argc, _TCHAR* argv[])
        {
            WSADATA WsaData;
            SOCKET s,s1;
            SOCKADDR_IN sin,from;
            char *RecvBuffer;
            char *MsgText;
            int err,fromlen;
            MsgText = "<html><b>Hello!!</b></html>";
            err = WSAStartup(0x0101,&WsaData);
            if(err == SOCKET_ERROR)
            {
                printf("WsaStartup() failed: %ld\n",GetLastError());
                return 1;
            }
            s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
            sin.sin_family = AF_INET;
            sin.sin_port = 3331;
            sin.sin_addr.s_addr = INADDR_ANY;
            err = bind(s,(LPSOCKADDR)&sin,sizeof(sin));
            err = listen(s,SOMAXCONN);
            fromlen = sizeof(from);
            s1 = accept(s,(struct sockaddr*)&from,&fromlen);
            printf("accept connection from %s, port %d\n", inet_ntoa(from.sin_addr),htons(from.sin_port));
            while(recv(s1,RecvBuffer,sizeof(RecvBuffer),0)!=SOCKET_ERROR)
            {
                printf("%c",RecvBuffer[0]);
                send(s1,MsgText,sizeof(MsgText),MSG_DONTROUTE);
            }
            return 0;
        }
        Ofer
        Нувообщето accept нужно применять если есть входящее подключение, а если и нету ни одного а ты вызвал функцию вот она и забрала на себя управление и ждет входящего подключения
        Цитата
        Remarks

        This routine extracts the first connection on the queue of pending connections on s, creates a new socket and returns a handle to the new socket. The newly created socket has the same properties as s including asynchronous events registered with WSAAsyncSelect or with WSAEventSelect, but not including the listening socket's group ID, if any. If no pending connections are present on the queue, and the socket is not marked as nonblocking, accept blocks the caller until a connection is present. If the socket is marked nonblocking and no pending connections are present on the queue, accept returns an error as described below. The accepted socket cannot be used to accept more connections. The original socket remains open.
        Сообщение отредактировано: Dem_max -
          sin.sin_port = 3331;

          А где преобразование порта в сетевой порядок? htons()?
            Dem_max, все верно... Я не правильно понял справку.

            Oleg2004, спасибо, учел :)
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0239 ]   [ 16 queries used ]   [ Generated: 10.12.24, 11:22 GMT ]