#include <sys/types.h><br/> #include <sys/socket.h><br/> #include <sys/un.h><br/> #include <netdb.h><br/> #include <arpa/inet.h><br/> #include <unistd.h><br/> #include <netinet/ in .h><br/> #include <stdlib.h><br/> #include <stdio.h><br/> #include < string .h><br/> #include <fcntl.h><br/> <br/> int ctrlsock, ns;<br/> struct sockaddr_un saun;<br/> <br/>
void init_ctrl_socket() {<br/> // .. AF_UNIX unix-socket <br/> if ( ( ctrlsock = socket(AF_UNIX, SOCK_STREAM, 0 ) ) < 0 ) {<br/> savelog( "ERROR: control socket creating error" );<br/> exit( 1 );<br/> }<br/> <br/> // .. .. <br/> int flags = fcntl(ctrlsock, F_GETFL, 0 );<br/> if ( fcntl(ctrlsock, F_SETFL, flags | O_NONBLOCK) < 0 ) {<br/> savelog( "ERROR: don't set socket on nonblocket mode" );<br/> exit( 1 );<br/> }<br/> <br/> // .. <br/> // . - .. <br/> <br/> saun.sun_family = AF_UNIX;<br/> strcpy(saun.sun_path, "/tmp/my_socks/sock_01" ); // <br/> int len = sizeof (saun.sun_family) + strlen(saun.sun_path);<br/> <br/> if (bind(ctrlsock, ( struct sockaddr *)&saun, len) < 0 ) {<br/> savelog( "ERROR: control socket binding error" );<br/> exit( 1 );<br/> }<br/> <br/> if (listen(ctrlsock, 5 ) < 0 ) {<br/> savelog( "ERROR: control socket listening error" );<br/> exit( 1 );<br/> }<br/>}<br/> <br/> <br/>
void check_ext_command() {<br/> int fromlen = sizeof ( struct sockaddr );<br/> if ( (ns = accept(ctrlsock, ( struct sockaddr *) &fsaun, &fromlen) ) > 0 ) {<br/> char lbuf[ 255 ];<br/> int ilen;<br/> ilen = recv( ns, &lbuf, 255 , 0 );<br/> lbuf[ilen]= '\0' ;<br/> do_remote_command( lbuf ); // .. <br/> close(ns);<br/> } <br/>}<br/> <br/>
char msg = "my message" ;<br/>send( ns, msg, strlen(msg), 0 );<br/> <br/>
class reccontrol {<br/> <br/> var $socket_path = '/tmp/my_socks/' ; // <br/> var $socket_prefix = 'sock_' ; // ( :)) <br/> var $list = array ();<br/> <br/> function getList() {<br/> $this ->writers_info = array ();<br/> $arr = scandir( $this ->socket_path);<br/> unset ( $arr [ 0 ]); // . <br/> unset ( $arr [ 1 ]); // .. <br/> foreach ( $arr as $k => $s_name ) {<br/> if ( ! $this ->ping( $s_name ) ) { <br/> // - <br/> @unlink( $this ->socket_path . $s_name ); <br/> unset ( $arr [ $k ] ); <br/> }<br/> }<br/> $this -> list = $arr ;<br/> <br/> }<br/> <br/> // " " <br/> function ping( $s_name ) {<br/> $socket_name = $this ->socket_path. $s_name ; // <br/> $sock = $this ->getSock( $socket_name ); // <br/> <br/> if ( ! $sock ) return false ; // - <br/> <br/> $buf = "ping" ;<br/> if ( @socket_send( $sock , $buf , strlen( $buf ), 0 ) == false ) {<br/> return false ; // - <br/> }<br/> <br/> $buf = '' ;<br/> @socket_recv( $sock , $buf , 1024 , 0 );<br/> if ( $buf ) { <br/> // $buf - , .. - <br/> addlog( " " . $s_name . " : " . $buf ); <br/> }<br/> <br/> socket_close( $sock ); <br/> return true ; // - ! <br/> }<br/> <br/> // unix .. , :) <br/> function getSock( $socket_name ) {<br/> // , AF_UNIX <br/> $socket = @socket_create(AF_UNIX, SOCK_STREAM, 0 ); <br/> // $socket_name - /tmp/my_socks/sock_1 - .. <br/> if ( @socket_connect( $socket , $socket_name ) == false ) { <br/> <br/> $err = socket_last_error();<br/> if ( $err ) {<br/> return false ; // :( <br/> }<br/> } else {<br/> return $socket ; // - <br/> }<br/> }<br/> <br/>} <br/>
Source: https://habr.com/ru/post/97847/
All Articles