⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 attsock.c

📁 mtk wap和mms代码。。适应mtk 25。26平台
💻 C
📖 第 1 页 / 共 4 页
字号:
		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 + -