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就失败呢?
大家帮忙看看。
|