@@ -153,9 +153,14 @@ int manager_push_to_network(Manager *m,
153153 /* Ninth: message */
154154 IOVEC_SET_STRING (iov [n ++ ], message );
155155
156- /* Tenth: Newline message separator, if not implicitly terminated by end of UDP frame */
157- if (m -> protocol == SOCK_DGRAM )
156+ /* Tenth: Optional newline message separator, if not implicitly terminated by end of UDP frame */
157+ if (SYSLOG_TRANSMISSION_PROTOCOL_TCP == m -> protocol )
158+ /* De facto standard: separate messages by a newline */
158159 IOVEC_SET_STRING (iov [n ++ ], "\n" );
160+ else if (SYSLOG_TRANSMISSION_PROTOCOL_UDP == m -> protocol ) {
161+ /* Message is implicitly terminated by end of UDP packet */
162+ } else
163+ return - EPROTONOSUPPORT ;
159164
160165 return network_send (m , iov , n );
161166}
@@ -175,7 +180,16 @@ int manager_open_network_socket(Manager *m) {
175180 if (!IN_SET (m -> address .sockaddr .sa .sa_family , AF_INET , AF_INET6 ))
176181 return - EAFNOSUPPORT ;
177182
178- m -> socket = socket (m -> address .sockaddr .sa .sa_family , m -> protocol |SOCK_CLOEXEC , 0 );
183+ switch (m -> protocol ) {
184+ case SYSLOG_TRANSMISSION_PROTOCOL_UDP :
185+ m -> socket = socket (m -> address .sockaddr .sa .sa_family , SOCK_DGRAM |SOCK_CLOEXEC |SOCK_NONBLOCK , 0 );
186+ break ;
187+ case SYSLOG_TRANSMISSION_PROTOCOL_TCP :
188+ m -> socket = socket (m -> address .sockaddr .sa .sa_family , SOCK_STREAM |SOCK_CLOEXEC |SOCK_NONBLOCK , 0 );
189+ break ;
190+ default :
191+ return - EINVAL ;
192+ }
179193 if (m -> socket < 0 )
180194 return - errno ;
181195
@@ -185,7 +199,7 @@ int manager_open_network_socket(Manager *m) {
185199 goto fail ;
186200 }
187201
188- if (SOCK_STREAM == m -> protocol ) {
202+ if (SYSLOG_TRANSMISSION_PROTOCOL_TCP == m -> protocol ) {
189203 union sockaddr_union sa ;
190204 socklen_t salen ;
191205 switch (m -> address .sockaddr .sa .sa_family ) {
0 commit comments