Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
#include #include #include #include #include #include #include #include #include union fdmsg { struct cmsghdr h; char buf[CMSG_SPACE(sizeof(int))]; }; int main(int argc, char** argv) { int lsock = socket(PF_UNIX, SOCK_STREAM, 0); if(lsock == -1) { printf("socket\n"); exit(1); } struct sockaddr_un addr; memset(&addr, 0, sizeof(struct sockaddr_un)); addr.sun_family = AF_UNIX; strcpy(addr.sun_path, "/home/chris/mysock"); int ret = bind(lsock, (struct sockaddr*)&addr, sizeof(addr.sun_family) + strlen(addr.sun_path)); if(ret == -1) { printf("bind\n"); exit(1); } ret = listen(lsock, 5); if(ret == -1) { printf("listen\n"); exit(1); } struct sockaddr_un other; socklen_t len = sizeof(struct sockaddr_un); int csock = accept(lsock, (struct sockaddr*)&other, &len); if(csock == -1) { printf("accept\n"); exit(1); } int tosend = shm_open("/chris", O_CREAT | O_RDWR, S_IRWXU); if(tosend == -1) { printf("file\n"); exit(1); } ftruncate(tosend, 10); char* shm = (char*)mmap(0, 10, PROT_READ | PROT_WRITE, MAP_SHARED, tosend, 0); if(shm == (char*)-1) { printf("mmap\n"); exit(1); } printf("Got shared memory at %p\n", shm); strcpy(shm, "SHM!"); shm[4] = '\0'; struct iovec iov; struct msghdr msg; char data = 'm'; union fdmsg cmsg; struct cmsghdr* h; msg.msg_control = cmsg.buf; msg.msg_controllen = sizeof(union fdmsg); msg.msg_name = 0; msg.msg_namelen = 0; msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_flags = 0; iov.iov_base = &data; iov.iov_len = 1; h = CMSG_FIRSTHDR(&msg); h->cmsg_len = CMSG_LEN(sizeof(int)); h->cmsg_level = SOL_SOCKET; h->cmsg_type = SCM_RIGHTS; *((int*)CMSG_DATA(h)) = tosend; ret = sendmsg(csock, &msg, 0); if(ret == -1) { printf("sendmsg\n"); exit(1); } shm_unlink("/chris"); while(1) { printf("SHM: %s; press a key to increment first byte of shm\n", shm); getchar(); shm[0]++; msync(shm, 10, 0); } return 0; }