int gethostname(char *name, int namelen) { RTQ_NODE *n; LPCData *p; LPCReturn *r; GetHostNameRet *ret; int retVal; char *s; _farsetsel(flat_selector); SocketError = 0; n = (RTQ_NODE *) MGenGetNode(IDLE_QUEUE); p = (LPCData *) FARPKL(&n->rtqDatum); SetLPCData(p); FARPOKL(&p->service,LPC_SOCKGETHOSTNAME); MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); PostWindowsMessage(); while ((n = (RTQ_NODE *) (MGenGetNode(REC_QUEUE))) == 0) Yield(); r = (LPCReturn *) FARPKL(&n->rtqDatum); if (FARPKS(&r->error) != LPC_NOERROR) { return -1; } ret = (GetHostNameRet *) r->Data; retVal = FARPKL(&ret->retVal); s = ret->name; fstrncpyfrom(name, s, namelen); #if 0 len = strlen(ret->name); if (len > namelen) memcpy(name, ret->name, ret->namelen); else strcpy(name, ret->name); #endif // get ready for next call MGenMoveTo(REC_QUEUE, IDLE_QUEUE); return retVal; }
int bind(SOCKET s, const struct sockaddr *name, int namelen) { RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); LPCData *p; LPCReturn *r; BindArgs *bargs; int retVal; _farsetsel(flat_selector); SocketError = 0; p = (LPCData *) FARPKL(&n->rtqDatum); SetLPCData(p); FARPOKL(&p->service, LPC_SOCKBIND); bargs = (BindArgs *) p->Data; FARPOKL(&bargs->s, s); FARPOKL(&bargs->namelen, namelen); fmemcpyto(bargs->name, name, namelen); MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); PostWindowsMessage(); while ((n = MGenGetNode(REC_QUEUE)) == 0) Yield(); r = (LPCReturn *) FARPKL(&n->rtqDatum); if (FARPKS(&r->error) != LPC_NOERROR) { return -1; } retVal = FARPKL(r->Data); // get ready for next call MGenMoveTo(REC_QUEUE, IDLE_QUEUE); return retVal; }
int setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen) { RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); LPCData *p; LPCReturn *r; SetSockOptArgs *args; int retVal; SocketError = 0; _farsetsel(flat_selector); p = (LPCData *) FARPKL(&n->rtqDatum); SetLPCData(p); FARPOKL(&p->service, LPC_SOCKSETOPT); args = (SetSockOptArgs *) p->Data; FARPOKL(&args->s, s); FARPOKL(&args->level, level); FARPOKL(&args->optname, optname); FARPOKL(&args->optlen, optlen); fmemcpyto(args->optval, optval, optlen); MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); PostWindowsMessage(); while ((n = MGenGetNode(REC_QUEUE)) == 0) Yield(); r = (LPCReturn *) FARPKL(&n->rtqDatum); retVal = FARPKL(r->Data); // get ready for next call MGenMoveTo(REC_QUEUE, IDLE_QUEUE); return retVal; }
void * GetFreeBufferToQueue(int q, int bufSize) { int i; for (i = 0; i < NFREEQ; i++) { if (Qsizes[i] >= bufSize && MGenGetQueueCtr(i+FREEQBASE)) { RTQ_NODE *n = MGenMoveTo(i+FREEQBASE, q); if (!n) continue; FARPOKL(&n->rtqUpCtr, bufSize); return (void *) FARPKL(&n->rtqDatum); } } return 0; }
unsigned long inet_addr(const char *cp) { int ret; unsigned int ha1, ha2, ha3, ha4; unsigned long ipaddr; ret = sscanf(cp, "%d.%d.%d.%d", &ha1, &ha2, &ha3, &ha4); if (ret != 4) return -1; ipaddr = (ha1 << 24) | (ha2 << 16) | (ha3 << 8) | ha4; return ipaddr; #if 0 RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); LPCData *p; LPCReturn *r; int retVal; SocketError = 0; _farsetsel(flat_selector); p = (LPCData *) FARPKL(&n->rtqDatum); SetLPCData(p); FARPOKL(&p->service, LPC_SOCKINETADDR); fstrcpyto(p->Data, cp); MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); PostWindowsMessage(); while ((n = MGenGetNode(REC_QUEUE)) == 0) Yield(); r = (LPCReturn *) FARPKL(&n->rtqDatum); if (FARPKS(&r->error) != LPC_NOERROR) { return -1; } retVal = FARPKL(r->Data); // get ready for next call MGenMoveTo(REC_QUEUE, IDLE_QUEUE); return retVal; #endif }
void sockets_flush(void) { RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); LPCData *p; SocketError = 0; p = (LPCData *) FARPKL(&n->rtqDatum); SetLPCData(p); FARPOKL(&p->service, LPC_SOCKFLUSH); MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); PostWindowsMessage(); while ((n = MGenGetNode(REC_QUEUE)) == 0) Yield(); MGenMoveTo(REC_QUEUE, IDLE_QUEUE); }
int WSAGetLastError(void) { RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); LPCData *p; LPCReturn *r; int retVal; _farsetsel(flat_selector); if (SocketError) { int err = SocketError; SocketError = 0; return err; } p = (LPCData *) FARPKL(&n->rtqDatum); SetLPCData(p); FARPOKL(&p->service, LPC_SOCKGETLASTERROR); MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); PostWindowsMessage(); while ((n = MGenGetNode(REC_QUEUE)) == 0) Yield(); r = (LPCReturn *) FARPKL(&n->rtqDatum); retVal = FARPKL(r->Data); // get ready for next call MGenMoveTo(REC_QUEUE, IDLE_QUEUE); return retVal; }
struct hostent * gethostbyname(const char *name) { RTQ_NODE *n = MGenGetNode(IDLE_QUEUE); LPCData *p; LPCReturn *r; struct hostent *retVal; _farsetsel(flat_selector); SocketError = 0; p = (LPCData *) FARPKL(&n->rtqDatum); SetLPCData(p); FARPOKL(&p->service, LPC_SOCKGETHOSTBYNAME); fstrcpyto(p->Data, name); MGenMoveTo(IDLE_QUEUE, SEND_QUEUE); PostWindowsMessage(); while ((n = MGenGetNode(REC_QUEUE)) == 0) Yield(); r = (LPCReturn *) FARPKL(&n->rtqDatum); retVal = (struct hostent *) r->Data; if (FARPKL(&retVal->h_name) == 0) { retVal = 0; } else { ZapHostEnt(); ReconstructHostEnt(&HostEnt, (void *) retVal); retVal = &HostEnt; } // get ready for next call MGenMoveTo(REC_QUEUE, IDLE_QUEUE); return retVal; }