Chce otworzyc socketa asynchronicznie aby nasluchiwal na porcie 139, ale ciagle wyskakuje mi na funkcji 'listen' - za chiny ludowe nie chce mi ona ruszyc. Ciagle zwraca mi -1... :(
Kod wyglada tak :
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#include "resource.h"
#define NET_ERROR -1
#define WM_TRAY WM_USER + 100
#define SOCKET_MSG WM_USER + 200
#define SOCKET_MSG_READ WM_USER + 300
NOTIFYICONDATA nid;
WORD sockVer;
WSADATA wsaData;
SOCKET listeningSocket;
SOCKADDR_IN serverInfo;
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[] = "WindowsApp";
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
char *text;
BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL, MAKEINTRESOURCE(IDI_ICON1));
wincl.hIconSm = LoadIcon (NULL, MAKEINTRESOURCE(IDI_ICON1));
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClassEx (&wincl))
return 0;
hwnd = CreateWindowEx (
0,
szClassName,
"Windows App",
WS_DISABLED,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,
0,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);
/* Make the window visible on the screen */
//ShowWindow (hwnd, nFunsterStil);
//socket initialization
sockVer=MAKEWORD(2,2);
WSAStartup(sockVer, &wsaData);
listeningSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(listeningSocket==INVALID_SOCKET) {
WSACleanup();
return NET_ERROR;
}
serverInfo.sin_family=AF_INET;
serverInfo.sin_addr.s_addr=INADDR_ANY;
serverInfo.sin_port=htons(139);
if ( setsockopt(listeningSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&bOptVal, bOptLen) !=0 )
{
sprintf(text,"%d",WSAGetLastError());
WSACleanup();
MessageBox(hwnd, text , "Setsockopt sie wysypalo na reuseaddr...", MB_OK);
return NET_ERROR;
}
if ( bind(listeningSocket, (SOCKADDR*)&serverInfo, sizeof(SOCKADDR_IN)) != 0 )
{
sprintf(text,"%d",WSAGetLastError());
WSACleanup();
MessageBox(hwnd, text , "Tym razem nie binduje...", MB_OK);
return NET_ERROR;
}
if ( listen(listeningSocket, 1) != 0 )
{
sprintf(text,"%d",WSAGetLastError());
WSACleanup();
MessageBox(hwnd, text , "I znowu ten listen...", MB_OK);
return NET_ERROR;
}
WSAAsyncSelect(listeningSocket, hwnd, SOCKET_MSG, FD_ACCEPT);
MessageBox(hwnd, NULL, "Tym razem wszystko ok !", MB_OK);
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
.
.
.
Dalej jest ciag dalszy kodu, al ew tej chwili zupelnie nieistotny.
Wienc o so tu chosi ???