Ha a socketdemo könyvtárban lévö gethost példa programot nem bapp_w32c vel, hanem bapp_w32_-vel buildeled, akkor
ugyanezt a hibát kapod (forditva a websrv/cgi-bin/cgi.exe bapp_w32c-vel linkeled, es csak ugy elinditod, latni fogod
hogy egyik esetben mukodik a gethostbyname, a masik esetben nem)
Linux alatt ezt a különbséget nem tapasztalod.A sejtes ilyenkor windows-on mindig az, hogy nincs
sikeres WSAStartup. Hogy erről bizonyságot szerezzünk,
bemásoljuk az scknames.cpp modult pl a websrv/cgi-bin-be , és berakjuk ezt,
......
if( he==NULL )
{ printf("wsa error:%d", WSAGetLastError(void));
akkor tényleg látjuk, hogy nem inicializálódik:
WSANOTINITIALISED 10093
Successful WSAStartup not yet performed.
Either the application has not called WSAStartup or WSAStartup failed. The application may be accessing a socket that the current active task does not own (that is, trying to share a socket between tasks), or WSACleanup has been called too many times.
Ha most megkeressük a WSA inicializálást, akkor látjuk, hogy az az sckutils.cpp-ben van:
static int wsa_status=wsastartup();
Mivel ez egészen pontosan igy néz ki:
#ifdef WIN32 //automatic initialization
static int wsastartup()
{
WSADATA Data;
return WSAStartup(MAKEWORD(1,1),&Data);}
static int wsa_status=wsastartup();
....
Két lehetséges ok van, vagy nem látja a WIN32 definet, amelynek ellentmond az, hogy bapp_w32c-vel
működik, vagy linkelési okokból a modul nem töltödik be, és igy a statikus adattag nem inicializálódik.
Ha most az sckutils-t is bemásolod, és igy build-elsz, latni fogod hogy minden mukszik.