есть следующий исходный текст. не работает хоть убейся веником. т.е. работает, но неправильно. он должен (как) задумывалось перемэпить порт одного компутэра на порт другого. перемэпивает, но только как-то косо, муть какая-то приходит. в чем проблема в силу своей неособой грамотности понять не могу. где ошибка ? или этот весь текст сплошная ошибка ? где искать ?
#include <windows.h>
#include <winsock.h>
#define SERVER_PORT 80
#define SERVER_HOST INADDR_ANY
#define TARGET_PORT 80
#define TARGET_HOST "proxy"
#define MAX_SERVER_CONNECTIONS 16
#define BUFFER_SIZE 16384
#define STACK_SIZE 32768
#define SERVER_DEVELOPMENT
#define CLIENT *((SOCKET *)lpParameter)
DWORD WINAPI ThreadProcedure (LPVOID lpParameter) {
SOCKET target_socket;
sockaddr_in addr;
hostent *target_host;
if (target_host=gethostbyname(TARGET_HOST)) {
addr.sin_addr.S_un.S_addr = *(DWORD* ) target_host->h_addr_list[0];
target_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(target_socket!=INVALID_SOCKET) {
addr.sin_family = AF_INET;
addr.sin_port = htons (TARGET_PORT);
if(connect(target_socket,(sockaddr *)&addr,sizeof(addr))!=SOCKET_ERROR) {
char buffer[BUFFER_SIZE];
int buffer_length=0;
while (TRUE) {
buffer_length=recv(CLIENT,buffer,BUFFER_SIZE,NULL);
send(target_socket,buffer,buffer_length,NULL);
buffer_length=recv(target_socket,buffer,BUFFER_SIZE,NULL);
send(CLIENT,buffer,buffer_length,NULL);
}
}
#ifdef SERVER_DEVELOPMENT
else MessageBox(0,"Connect()","Ошибка",MB_ICONSTOP);
#endif
}
#ifdef SERVER_DEVELOPMENT
else MessageBox(0,"Socket()","Ошибка",MB_ICONSTOP);
#endif
closesocket(target_socket);
}
#ifdef SERVER_DEVELOPMENT
else MessageBox(0,"GetHostByName()","Ошибка",MB_ICONSTOP);
#endif
closesocket(CLIENT);
ExitThread(0);
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR pCmdLine,int nCmdShow) {
WSADATA wsdata;
if (WSAStartup(MAKEWORD(2,0),&wsdata)!=SOCKET_ERROR) {
SOCKET in;
in=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(in!=INVALID_SOCKET) {
sockaddr_in addr_in;
addr_in.sin_family=AF_INET;
addr_in.sin_addr.S_un.S_addr=htonl(SERVER_HOST);
addr_in.sin_port=htons (SERVER_PORT);
if(bind(in,(sockaddr*)&addr_in,sizeof(addr_in))!=SOCKET_ERROR) {
if(listen(in,MAX_SERVER_CONNECTIONS)!=SOCKET_ERROR) {
SOCKET out;
while(TRUE) {
out=accept(in,NULL,NULL);
if (out) CreateThread(NULL,STACK_SIZE,ThreadProcedure,&out,NULL,NULL);
}
}
#ifdef SERVER_DEVELOPMENT
else MessageBox(0,"Listen()","Ошибка",MB_ICONSTOP);
#endif
}
#ifdef SERVER_DEVELOPMENT
else MessageBox(0,"Bind()","Ошибка",MB_ICONSTOP);
#endif
closesocket(in);
}
#ifdef SERVER_DEVELOPMENT
else MessageBox(0,"Socket()","Ошибка",MB_ICONSTOP);
#endif
WSACleanup();
}
#ifdef SERVER_DEVELOPMENT
else MessageBox(0,"WSAStartup()","Ошибка",MB_ICONSTOP);
#endif
return 0;
}
// else MessageBox(0,"Егог","Ошибка",MB_ICONSTOP);
заранее благодарен ...