udp socket通讯,recvfrom()一直返回-1,perror提示"recvfrom: Bad address"
本人在设备中两个进程间socket通讯,udp方式,相同IP不同端口号.其中一个进程向另一个进程发送数据后,接收对方响应数据,recvfrom()一直返回-1,perror提示 "recvfrom:   Bad   address ",但是接收到的响应数据又是对的,不知道错在哪里?代码如下.另一个进程工作正常.   
             ... 
             myTagType   tag;//256   bytes 
             int   tsresponse_sock;	 
             struct   sockaddr_in   TSResponse;//local   IP 
             struct   sockaddr_in   source_resp;//dest   IP 
             int   command_port   =   3200;                  //udp   control   port; 
             int   on   =   1;   
             ... 
             bzero(&TSResponse,   sizeof(TSResponse)); 
             TSResponse.sin_family   =   AF_INET; 
             TSResponse.sin_addr.s_addr   =   htonl(INADDR_ANY); 
             TSResponse.sin_port   =   htons(command_port+1); 
             tsresponse_sock   =   socket(AF_INET,   SOCK_DGRAM,   0); 
             setsockopt(tsresponse_sock,   SOL_SOCKET,   SO_REUSEADDR,   (const   char   *)&on,   sizeof(on)); 
             bind(tsresponse_sock,   (struct   sockaddr   *)&TSResponse,   sizeof(struct   sockaddr_in));   
             bzero(&source_resp,   sizeof(source_resp)); 
             source_resp.sin_family   =   AF_INET; 
             source_resp.sin_addr.s_addr   =   local_ipaddr; 
             source_resp.sin_port   =   htons(command_port);  					 
             .... 
                sendto(tsresponse_sock,   &tag,   20,   0,   (struct   sockaddr   *)&source_resp,   sizeof(struct   sockaddr_in)); 
                .... 
             timeout.tv_sec=3; 
             ret   =   select(tsresponse_sock+1,   &fdread,   NULL,&fdexcept,   &timeout); 
             .... 
             else   if   (FD_ISSET(tsresponse_sock,&fdread))   { 
             { 
                      bzero   (&tag,   sizeof   (tag)); 
                      nsize   =   recvfrom(tsresponse_sock,   &tag,   sizeof(tag),   0,   (struct   sockaddr   *)&source_resp,   sizeof(struct   sockaddr_in)); 
                      printf( "recv   nsize   =   %d\n ",nsize); 
                      if(nsize   ==   -1)   perror( "recvfrom "); 
                      .... 
                } 
                ...
------解决方案--------------------recvfrom最后一个参数是socklen_t *, 你用的是socklen_t
------解决方案--------------------recvfrom最后一个参数是int *,而你是int
int addr_len =sizeof(struct sockaddr_in);
nsize = recvfrom(tsresponse_sock,&tag,