蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 | -->
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程 -->


    

蓝森林 http://www.lslnet.com 2006年8月16日 14:08

UNIX socket recv 始终返回0

server端代码:

bind_sun.sun_family = AF_UNIX;
strcpy(bind_sun.sun_path, "/tmp/arpmon");

unix_sock = socket(PF_UNIX, SOCK_STREAM, 0);

if (unix_sock < 0) {
fprintf(stderr,"Can't create UNIX socket\n");
return;
}
if (setsockopt(unix_sock, SOL_SOCKET, SO_REUSEADDR,
(char *) &one, sizeof(one)) < 0){
fprintf(stderr, "setsockopt error\n");
return;
}
if (bind(unix_sock, (struct sockaddr *)&bind_sun,
sizeof(bind_sun)) < 0) {
fprintf(stderr,"Can't bind\n");
return;
}
if (listen(unix_sock, 5) < 0) {
fprintf(stderr,"can't listen\n");
return;
}

// start get virtual and accept client
int client, buflen;
struct sockaddr_un client_sun;

while (1) {
// accept a client
client = accept(unix_sock,
(struct sockaddr *)&client_sun,
(socklen_t*)sizeof(client_sun));

if ((buflen = strlen(buf)) > 0) {
send(client, buf, buflen, 0);
printf("write: %d\n", buflen); // 这边write成功,没问题
}
close(client);
}


client端代码:

bind_sun.sun_family = AF_UNIX;
strcpy(bind_sun.sun_path, "/tmp/arpmon");

unix_sock = socket(PF_UNIX, SOCK_STREAM, 0);

if (unix_sock <= 0) {
fprintf(stderr,"Can't create UNIX socket\n");
return 0;
}

if (0 != connect(unix_sock, (struct sockaddr *)&bind_sun,
(socklen_t)sizeof(bind_sun))) {

fprintf(stderr,"Can't connect UNIX socket:%s\n",
strerror(errno));
return 0;
}

memset((void *)buffer, 0, sizeof(buffer));
len = recv(unix_sock, buffer, sizeof(buffer), 0); // 始终返回0
printf("len: %d, %s\n", len, buffer);
return 0;

client的recv始终返回0。两端权限都是root, 应该不是权限问题,
既然能连接的上,send也成功,为什么recv就失败呢?
大家帮忙看看。


Re: UNIX socket recv 始终返回0

不好意思,accept参数传错了

Re: UNIX socket recv 始终返回0

刚贴出来就看到已解决。晚了。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com