在采用socket实现嵌入式下邮件发送的功能时,由于网络的原因会出现登录邮件服务器失败的情况,此种情况如果socket采用阻塞模式就会导致程序卡在connect函数中出不来。我采用的解决方法是在connect时将socket设置为非阻塞模式,设置10s的超时,然后再将socket设置为非阻塞模式。
具体的代码片段如下:
//获得域名地址
static char *GetIp(char *dn_or_ip)
{
struct sockaddr_in addr;
struct hostent *host;
struct ifreq req;
int sock;
if (dn_or_ip == NULL) return NULL;
if (strcmp(dn_or_ip, "localhost") == 0)
{
sock = socket(AF_INET, SOCK_DGRAM, 0);
strncpy(req.ifr_name, "eth0", IFNAMSIZ);
if ( ioctl(sock, SIOCGIFADDR, &req) < 0 )
{
DBG_PRINT(("ioctl error: %s\n", strerror (errno)));
return NULL;
}
dn_or_ip = (char *)inet_ntoa(*(struct in_addr *) &((struct sockaddr_in *) &req.ifr