[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <strings.h>
int main(int argc, char **argv)
{
int sockfd;
socklen_t len;
struct sockaddr_un addr1, addr2;
if (argc != 2) {
perror("usage: unixbind <pathname>");
exit(EXIT_FAILURE);
}
sockfd = socket(AF_LOCAL, SOCK_STREAM, 0);
/*如果已经存在该路径名,则 bind 会失败;为了排除这种情况,先删除该路径名,以防它的事先存在。如果不存在
* 那么 unlink 返回一个错误,该错误可以忽略
*/
unlink(argv[1]);
bzero(&addr1, sizeof(addr1));
addr1.sun_family = AF_LOCAL;
strncpy(addr1.sun_path, argv[1], sizeof(addr1.sun_path)-1);
bind(sockfd, (struct sockaddr *)&addr1, SUN_LEN(&addr1));
len = sizeof(addr2);
getsockname(sockfd, (struct sockaddr *)&addr2, &len);
printf("bound name = %s, return len = %d\n", addr2.sun_path, len);
exit(0);
}