📄 attsock.c
字号:
MsgOut("[gWinSock] - call bind(), with unknown socket=%d\r\n", s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
if (addr == NULL || addrlen != sizeof(SOCKADDR_IN))
{
MsgOut("[gWinSock] - fail to call bind(), with invalid paramters, socket=%d\r\n", s);
SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
pWinSock = &gWinSock[i];
sockaddr_tokal((struct sockaddr *)addr, &localAddr);
result = soc_bind(pWinSock->kSocket, &localAddr);
if (result < 0)
{
MsgOut("[gWinSock] - fail to call bind(), with unknwon error, socket=%d\r\n", s);
//error = soc_get_last_error(pWinSock->kSocket, &error, &result);
//SockSetError(error);
SockSetError(result);
result = SOCKET_ERROR;
}
MsgOut("[gWinSock] - succeed to call bind() socket=%d", s);
return result;
}
int plx_connect(SOCKET s, const struct sockaddr *addr, int addrlen)
{
WINSOCK *pWinSock = NULL;
int i = Sock_GetIndexByHandle(s);
sockaddr_struct destAddr; /* socket address structure */
kal_int32 result = 0;
kal_int8 error = 0;
if (i < 0)
{
MsgOut("[gWinSock] - call connect(), with unknown socket=%d\r\n", s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
if (addr == NULL || addrlen != sizeof(SOCKADDR_IN))
{
MsgOut("[gWinSock] - fail to call connect(), with invalid socket=%d\r\n", s);
SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
pWinSock = &gWinSock[i];
sockaddr_tokal((struct sockaddr *)addr, &destAddr);
result = soc_connect(pWinSock->kSocket, &destAddr);
if (result < 0)
{
#ifdef SOCKET_HARD_ERR
int ret = 0;
ret = soc_get_last_error(pWinSock->kSocket, &error, &result);
#endif
#ifdef SOCKET_MSGOUT
MsgOut("[gWinSock] - call connect() failed with socket=%d, kSocket =%d, error = %d, result = %d\r\n", s, pWinSock->kSocket, error, result);
#endif
//SockSetError(error);
SockSetError(result);
result = SOCKET_ERROR;
}
else if (result == 0)
{
PlxPostMessage(gWinSock[i].hWnd, gWinSock[i].uMsg,
gWinSock[i].hSocket, MAKELONG(FD_CONNECT, 0));
result = SOCKET_ERROR;
SockSetError(EWOULDBLOCK);
}
return result;
}
int plx_listen(SOCKET s, int backlog)
{
WINSOCK *pWinSock = NULL;
int i = Sock_GetIndexByHandle(s);
kal_int32 result = 0;
kal_int8 error = 0;
if (i < 0)
{
MsgOut("[gWinSock] - call connect(), with unknown socket=%d\r\n", s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
pWinSock = &gWinSock[i];
result = soc_listen(pWinSock->kSocket, (kal_uint8)backlog);
if (result < 0)
{
MsgOut("[gWinSock] - call listen() failed, with unkown reason, socket=%d\r\n", s);
//error = soc_get_last_error(pWinSock->kSocket, &error, &result);
//SockSetError(error);
SockSetError(result);
result = SOCKET_ERROR;
}
return result;
}
int plx_send(SOCKET s, const char *pbuf, int len, int flags)
{
WINSOCK *pWinSock = NULL;
int i = Sock_GetIndexByHandle(s);
kal_int32 result = 0;
kal_int8 error = 0;
if (i < 0)
{
MsgOut("[gWinSock] - call send(), with unknown socket=%d\r\n", s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
pWinSock = &gWinSock[i];
if (pWinSock->Unused[0] == SOC_CLOSE)
{
MsgOut("[gWinSock] - call send(), with ereset socket=%d\r\n", s);
SockSetError(ERESET);
return SOCKET_ERROR;
}
result = soc_send(pWinSock->kSocket, (kal_uint8 *)pbuf, (kal_int32)len, (kal_uint8)flags);
if (result < 0)
{
#ifdef SOCKET_HARD_ERR
int ret = 0;
ret = soc_get_last_error(pWinSock->kSocket, &error, &result);
#endif
MsgOut("[gWinSock] - fail to call send() with socket=%d, error = %d, result = %d\r\n", s, error, result);
//SockSetError(error);
result = error_convert(result);
SockSetError(result);
result = SOCKET_ERROR;
}
else
{
#ifdef SOCKET_MSGOUT
MsgOut("[gWinSock] + send(s=%d) call soc_send(kSocket=%d), datalen=%d, result=%d\r\n",
s, gWinSock[i].kSocket, len, result);
#endif
#ifdef SOCKET_SND_MSG
Sock_PostMessage(i, FD_READ, 0); /* 测试用 */
#endif
}
return result;
}
int plx_sendto(SOCKET s, const char *pbuf, int len, int flags,
const struct sockaddr *to, int tolen)
{
WINSOCK *pWinSock = NULL;
int i = Sock_GetIndexByHandle(s);
sockaddr_struct destAddr; /* socket address structure */
kal_int32 result = 0;
kal_int8 error = 0;
if (i < 0)
{
MsgOut("[gWinSock] - call sendto(), with unknown socket=%d\r\n", s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
if (pbuf == NULL || len <= 0)
{
MsgOut("[gWinSock] - fail to call sendto(), with invalid paramters, socket=%d\r\n", s);
SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
if (to == NULL || tolen != sizeof(SOCKADDR_IN))
{
MsgOut("[gWinSock] - fail to call sendto(), with invalid \"to\" paramters, socket=%d\r\n", s);
SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
pWinSock = &gWinSock[i];
sockaddr_tokal((struct sockaddr *)to, &destAddr);
result = soc_sendto(pWinSock->kSocket, (kal_uint8 *)pbuf, (kal_int32)len, (kal_uint8)flags, &destAddr);
if (result > 0)
{
#ifdef SOCKET_MSGOUT
MsgOut("[gWinSock] + sendto(s=%d) call soc_sendto(kSocket=%d), datalen=%d, result=%d succeed\r\n",
s, gWinSock[i].kSocket, len, result);
#endif
#ifdef SOCKET_SND_MSG
Sock_PostMessage(i, FD_READ, 0); /* 测试用 */
#endif
}
else
{
#ifdef SOCKET_HARD_ERR
int ret = 0;
ret = soc_get_last_error(pWinSock->kSocket, &error, &result);
#endif
//SockSetError(error);
#ifdef SOCKET_MSGOUT
MsgOut("[gWinSock] + sendto(s=%d) call soc_sendto(kSocket=%d), error=%d, result=%d failure\r\n",
s, gWinSock[i].kSocket, error, result);
#endif
result = error_convert(result);
SockSetError(result);
result = SOCKET_ERROR;
}
#ifdef MMI_ON_WIN32
/* 测试用 */
{
Sock_PostMessage(i, FD_READ, 0);
}
#endif
return result;
}
int plx_recv(SOCKET s, char *pbuf, int len, int flags)
{
int i = Sock_GetIndexByHandle(s);
WINSOCK *pWinSock = NULL;
kal_int32 result = 0;
kal_int8 error = 0;
if (i < 0)
{
MsgOut("[gWinSock] - call recv(), with unknown socket=%d\r\n", s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
if (pbuf == NULL || len <= 0)
{/*
MsgOut("[gWinSock] - fail to call recv(), with invalid paramters, socket=%d, pbuf=%lx, len=%d\r\n",
s, pbuf, len);
*/ SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
pWinSock = &gWinSock[i];
result = soc_recv(pWinSock->kSocket, (kal_uint8 *)pbuf, (kal_int32)len, (kal_uint8)flags);
if (result >= 0)
{
#ifdef SOCKET_MSGOUT
MsgOut("[gWinSock] + recv(s=%d) call soc_recv(kSocket=%d), datalen=%d, result=%d\r\n",
s, gWinSock[i].kSocket, len, result);
MsgOut("pbuf=%lx, bufsize=%d, ", pbuf, result);
#endif
}
else
{
#ifdef SOCKET_HARD_ERR
int ret = 0;
ret = soc_get_last_error(pWinSock->kSocket, &error, &result);
MsgOut("[gWinSock] - fail to call recv(), kSocket=%d, error %d, result %d", gWinSock[i].kSocket, error, result);
#endif
//SockSetError(error);
result = error_convert(result);
SockSetError(result);
result = SOCKET_ERROR;
}
return result;
}
int plx_recvfrom(SOCKET s, char *pbuf, int len, int flags,
struct sockaddr *from, int *fromlen)
{
SOCKADDR_IN *remote = (SOCKADDR_IN*)from;
int i = Sock_GetIndexByHandle(s);
WINSOCK *pWinSock = NULL;
sockaddr_struct fromAddr; /* socket address structure */
kal_int32 result = 0;
kal_int8 error = 0;
#ifdef SOCKET_MSGOUT
MsgOut("[gWinSock] + recvfrom(s=%d) call soc_recvfrom begin\r\n", s);
#endif
if (i < 0)
{
MsgOut("[gWinSock] - call recvfrom(), with unknown socket=%d\r\n", s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
if (pbuf == NULL || len <= 0)
{
MsgOut("[gWinSock] - fail to call recvfrom(), with invalid pbuf, socket=%d\r\n", s);
SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
if (from != NULL)
{
if (fromlen == NULL || *fromlen < sizeof(SOCKADDR_IN))
{
MsgOut("[gWinSock] - fail to call recvfrom(), "
"with invalid \"fromlen\" paramters, socket=%d\r\n", s);
SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
}
pWinSock = &gWinSock[i];
result = soc_recvfrom(gWinSock[i].kSocket, (kal_uint8 *)pbuf, (kal_int32)len, (kal_uint8)flags, &fromAddr);
if (result >= 0)
{
#ifdef SOCKET_MSGOUT
MsgOut("[gWinSock] + recvfrom(s=%d) call soc_recvfrom(kSocket=%d), bufsize=%d, result=%d succeed\r\n",
s, gWinSock[i].kSocket, len, result);
#endif
if (from != NULL)
{
remote->sin_family = AF_INET;
remote->sin_port = htons(fromAddr.port);
memcpy(&remote->sin_addr.S_un.S_addr, fromAddr.addr, fromAddr.addr_len);
*fromlen = fromAddr.addr_len;
}
}
else
{
#ifdef SOCKET_HARD_ERR
int ret = 0;
ret = soc_get_last_error(pWinSock->kSocket, &error, &result);
#endif
#ifdef SOCKET_MSGOUT
MsgOut("[gWinSock] + recvfrom(s=%d) call soc_recvfrom(kSocket=%d), error=%d, result=%d failure\r\n",
s, gWinSock[i].kSocket, error, result);
#endif
//SockSetError(error);
result = error_convert(result);
SockSetError(result);
result = SOCKET_ERROR;
}
return result;
}
int plx_ioctlsocket(SOCKET s, long cmd, unsigned long *argp)
{
int i = Sock_GetIndexByHandle(s);
WINSOCK *pWinSock = NULL;
kal_int32 result = 0;
//kal_int8 error = 0;
kal_uint8 val = 0;
if (i < 0)
{
MsgOut("[gWinSock] - call ioctlsocket(), with unknown socket=%d\r\n", s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
if (argp == NULL)
{
MsgOut("[gWinSock] - fail to call ioctlsocket(), "
"with invalid paramters, cmd=%d\r\n", cmd);
result = SOCKET_ERROR;
SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
pWinSock = &gWinSock[i];
switch (cmd)
{
case FIONREAD:
*argp = 2048;
MsgOut("[gWinSock] + ioctlsocket(cmd=FIONREAD)=%d\r\n", *argp);
break;
case FIONBIO:
val = (kal_uint8)(*argp);
result = soc_setsockopt(pWinSock->kSocket, SOC_NBIO, &val, sizeof(val));
break;
default:
MsgOut("[gWinSock] - call ioctlsocket(), with unsupported command=%d\r\n", cmd);
SockSetError(EOPNOTSUPP);
result = SOCKET_ERROR;
}
return result;
}
int plx_getsockname(SOCKET s, struct sockaddr *addr, int *addrlen)
{
SOCKADDR_IN *local = (SOCKADDR_IN *)addr;
int i = Sock_GetIndexByHandle(s);
WINSOCK *pWinSock = NULL;
sockaddr_struct localAddr; /* socket address structure */
kal_int32 result = 0;
//kal_int8 error = 0;
//kal_uint8 val = 0;
if (i < 0)
{
MsgOut("[gWinSock] - fail to call getsockname(), with unknown socket, socket=%d\r\n",s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
if (addr == NULL || addrlen == NULL || *addrlen < sizeof(SOCKADDR_IN))
{
MsgOut("[gWinSock] - fail to call getsockname(), with invalid paramters, socket=%d\r\n",s);
SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
result = soc_getsockaddr(pWinSock->kSocket, KAL_TRUE, &localAddr);
if (result < 0)
{
MsgOut("[gWinSock] - getsockname() return errno=%lx\r\n", result);
result = error_convert(result);
SockSetError(result);
return result;
}
local->sin_family = AF_INET;
local->sin_port = htons((unsigned short)localAddr.port);
memcpy(&local->sin_addr, &localAddr.addr, localAddr.addr_len);
*addrlen = localAddr.addr_len;
return result;
}
int plx_gethostname(char *name, int namelen)
{
MsgOut("[gWinSock] - gethostname() not supported %d!\r\n", 0);
SockSetError(EOPNOTSUPP);
return SOCKET_ERROR;
}
int plx_getpeername(SOCKET s, struct sockaddr *name, int *namelen)
{
SOCKADDR_IN *peerAddr = (SOCKADDR_IN *)name;
int i = Sock_GetIndexByHandle(s);
WINSOCK *pWinSock = NULL;
sockaddr_struct remoteAddr; /* socket address structure */
kal_int32 result = 0;
//kal_int8 error = 0;
//kal_uint8 val = 0;
if (i < 0)
{
MsgOut("[gWinSock] - fail to call getsockname(), with unknown socket, socket=%d\r\n",s);
SockSetError(ENOTSOCK);
return SOCKET_ERROR;
}
if (name == NULL || namelen == NULL || *namelen < sizeof(SOCKADDR_IN))
{
MsgOut("[gWinSock] - fail to call getsockname(), with invalid paramters, socket=%d\r\n",s);
SockSetError(EINVALIDPARA);
return SOCKET_ERROR;
}
result = soc_getsockaddr(pWinSock->kSocket, KAL_FALSE, &remoteAddr);
if (result < 0)
{
MsgOut("[gWinSock] - getsockname() return errno=%lx\r\n", result);
result = error_convert(result);
SockSetError(result);
return result;
}
peerAddr->sin_family = AF_INET;
peerAddr->sin_port = htons((unsigned short)remoteAddr.port);
memcpy(&peerAddr->sin_addr, &remoteAddr.addr, remoteAddr.addr_len);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -