<span style="color: #0000ff">#define MAXLINE 80
<span style="color: #0000ff">char *socket_path = <span style="color: #800000">"<span style="color: #800000">server.socket<span style="color: #800000">"<span style="color: #000000">;
<span style="color: #0000ff">int main(<span style="color: #0000ff">void<span style="color: #000000">)
{
<span style="color: #0000ff">struct<span style="color: #000000"> sockaddr_un serun,cliun;
socklen_t cliun_len;
<span style="color: #0000ff">int<span style="color: #000000"> listenfd,connfd,size;
<span style="color: #0000ff">char<span style="color: #000000"> buf[MAXLINE];
<span style="color: #0000ff">int<span style="color: #000000"> i,n;
</span><span style="color: #0000ff">if</span> ((listenfd = socket(AF_UNIX,SOCK_STREAM,<span style="color: #800080">0</span>)) < <span style="color: #800080">0</span><span style="color: #000000">) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">socket error</span><span style="color: #800000">"</span><span style="color: #000000">);
exit(</span><span style="color: #800080">1</span><span style="color: #000000">);
}
memset(</span>&serun,<span style="color: #800080">0</span>,<span style="color: #0000ff">sizeof</span><span style="color: #000000">(serun));
serun.sun_family </span>=<span style="color: #000000"> AF_UNIX;
strcpy(serun.sun_path,socket_path);
size </span>= offsetof(<span style="color: #0000ff">struct</span> sockaddr_un,sun_path) +<span style="color: #000000"> strlen(serun.sun_path);
unlink(socket_path);
</span><span style="color: #0000ff">if</span> (bind(listenfd,(<span style="color: #0000ff">struct</span> sockaddr *)&serun,size) < <span style="color: #800080">0</span><span style="color: #000000">) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">bind error</span><span style="color: #800000">"</span><span style="color: #000000">);
exit(</span><span style="color: #800080">1</span><span style="color: #000000">);
}
printf(</span><span style="color: #800000">"</span><span style="color: #800000">UNIX domain socket boundn</span><span style="color: #800000">"</span><span style="color: #000000">);
</span><span style="color: #0000ff">if</span> (listen(listenfd,<span style="color: #800080">20</span>) < <span style="color: #800080">0</span><span style="color: #000000">) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">listen error</span><span style="color: #800000">"</span><span style="color: #000000">);
exit(</span><span style="color: #800080">1</span><span style="color: #000000">);
}
printf(</span><span style="color: #800000">"</span><span style="color: #800000">Accepting connections ...n</span><span style="color: #800000">"</span><span style="color: #000000">);
</span><span style="color: #0000ff">while</span>(<span style="color: #800080">1</span><span style="color: #000000">) {
cliun_len </span>= <span style="color: #0000ff">sizeof</span><span style="color: #000000">(cliun);
</span><span style="color: #0000ff">if</span> ((connfd = accept(listenfd,(<span style="color: #0000ff">struct</span> sockaddr *)&cliun,&cliun_len)) < <span style="color: #800080">0</span><span style="color: #000000">){
perror(</span><span style="color: #800000">"</span><span style="color: #800000">accept error</span><span style="color: #800000">"</span><span style="color: #000000">);
</span><span style="color: #0000ff">continue</span><span style="color: #000000">;
}
</span><span style="color: #0000ff">while</span>(<span style="color: #800080">1</span><span style="color: #000000">) {
n </span>= read(connfd,buf,<span style="color: #0000ff">sizeof</span><span style="color: #000000">(buf));
</span><span style="color: #0000ff">if</span> (n < <span style="color: #800080">0</span><span style="color: #000000">) {
perror(</span><span style="color: #800000">"</span><span style="color: #800000">read error</span><span style="color: #800000">"</span><span style="color: #000000">);
</span><span style="color: #0000ff">break</span><span style="color: #000000">;
} </span><span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span>(n == <span style="color: #800080">0</span><span style="color: #000000">) {
printf(</span><span style="color: #800000">"</span><span style="color: #800000">EOFn</span><span style="color: #800000">"</span><span style="color: #000000">);
</span><span style="color: #0000ff">break</span><span style="color: #000000">;
}
printf(</span><span style="color: #800000">"</span><span style="color: #800000">received: %s</span><span style="color: #800000">"</span><span style="color: #000000">,buf);
</span><span style="color: #0000ff">for</span>(i = <span style="color: #800080">0</span>; i < n; i++<span style="color: #000000">) {
buf[i] </span>=<span style="color: #000000"> toupper(buf[i]);
}
write(connfd,n);
}
close(connfd);
}
close(listenfd);
</span><span style="color: #0000ff">return</span> <span style="color: #800080">0</span><span style="color: #000000">;
}
socket( family, type, protocol);
(编辑:瑞安网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!