// @retval -5 调用 getsockopt 函数失败
// @retval -6 调用 connect 函数失败
// @retval -7 设置连接服务端的套接字为阻塞模式失败
// @retval -8 发送协议数据失败
// @retval -9 等待服务端返回数据超时
// @retval -10 调用 recv 函数出错
// @retval -11 pucSRBuffer 指向的缓冲区空间不足
int
send_receive_data( unsigned char* const pucSRBuffer,
const unsigned short usBufferLen )
{
// 本函数执行结果返回值
int iResult = 0; // 默认为零(0) 表示成功
// 连接服务端的 TCP 套接字
int iServerSocket = -1;
// 服务端IP与端口
sockaddr_in sServerAddr;
// I/O 状态标识值
int iValue = 1;
// 获取套接字错误状态码
int iSo_Error = 0;
socklen_t So_Error_len = sizeof( iSo_Error );
// 接收到的通讯协议数据长度
unsigned short usRealReceivedData = 0;
do // 非循环,只是为了减少分支缩进和保证进出口唯一
{
// 1.检查参数是否合法
if ( ( NULL == pucSRBuffer ) ||
( 0 >= usBufferLen ) ||
( 0 == pucSRBuffer[0] ) )
{
DEBUG_OUTPUT( "Invalid parameter" );
iResult = -1;
break;
}
// 2.创建连接服务端的套接字
iServerSocket = socket( AF_INET, // IPv4 协议
SOCK_STREAM, // TCP 套接字协议类型
0 ); // 默认协议,通常设置为零(0)
if ( 0 > iServerSocket )










