static ssize_t soc_write(struct _reent *r, int fd, const char *ptr, size_t len) { Handle sockfd = *(Handle*)fd; return soc_sendto(sockfd, ptr, len, 0, NULL, 0); }
void EmPingSendPkt(void) { kal_uint16 i = 0; kal_uint16 j = 0; kal_bool ret_val = KAL_FALSE; kal_int16 ret = 0; for(j = PING_CONTEXT_INFO(currCount); j < PING_CONTEXT_INFO(pingCount);j++) { PING_CONTEXT_INFO(pingStartFN) = 0; PING_CONTEXT_INFO(pingEndFN) = 0; kal_mem_set(PING_CONTEXT_INFO(echo_req), 0, PING_CONTEXT_INFO(pingSize)+8); PING_CONTEXT_INFO(echo_req[0]) = 8;//echo req PING_CONTEXT_INFO(echo_req[4]) = 0;//identifier PING_CONTEXT_INFO(echo_req[5]) = 100; PING_CONTEXT_INFO(echo_req[6]) = (kal_uint8)(PING_CONTEXT_INFO(seqNo) >> 8);//seq no PING_CONTEXT_INFO(echo_req[7]) = (kal_uint8)(PING_CONTEXT_INFO(seqNo) & 0x00ff); for(i=8;i<PING_CONTEXT_INFO(pingSize);i++)//dummy data PING_CONTEXT_INFO(echo_req[i])= (kal_uint8)(j+1); //there are two choices: connect->send or sendto //where addr specifies the destionation of ping //sendto directly ret = soc_sendto(PING_CONTEXT_INFO(socketId),PING_CONTEXT_INFO(echo_req), (PING_CONTEXT_INFO(pingSize)+8), 0, &PING_CONTEXT_INFO(pingSrvAddr)); if(ret != (PING_CONTEXT_INFO(pingSize)+8)) { if(ret == SOC_WOULDBLOCK) { kal_print("Socket said send it later"); return; } kal_print("send ping error"); soc_close(PING_CONTEXT_INFO(socketId)); if(PING_CONTEXT_INFO(echo_req) != NULL) { OslMfree(PING_CONTEXT_INFO(echo_req)); } if(PING_CONTEXT_INFO(echo_rsp) != NULL) { OslMfree(PING_CONTEXT_INFO(echo_rsp)); } PING_CONTEXT_INFO(echo_req) = NULL; PING_CONTEXT_INFO(echo_rsp) = NULL; PING_CONTEXT_INFO(state) = PING_INACTIVE; return; } else { EmPingStartTimer(PING_CONTEXT_INFO(seqNo)); //PING_CONTEXT_INFO(currCount)++; PING_CONTEXT_INFO(seqNo)++; PING_CONTEXT_INFO(pingStartFN) = TMD_System_Clock; } ret_val = EmPingRecvPkt(); if(ret_val == KAL_FALSE) { break; } } return; }
ssize_t soc_send(int sockfd, const void *buf, size_t len, int flags) { return soc_sendto(sockfd, buf, len, flags, NULL, 0); }