From bc59e5d3b498a155ac91a70e104cd895bb5fd6e6 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Fri, 10 Nov 2006 19:10:32 +0000
Subject: [PATCH] Handle bind() failure better.

---
 src/xpdev/xp_syslog.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/xpdev/xp_syslog.c b/src/xpdev/xp_syslog.c
index a03669b829..55c4d53937 100644
--- a/src/xpdev/xp_syslog.c
+++ b/src/xpdev/xp_syslog.c
@@ -62,12 +62,13 @@ void xp_openlog(const char *ident, int logopt, int facility)
 	syslog_sock=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
 	if(syslog_sock==INVALID_SOCKET)
 		return;
-	/*
-	 * If the bind() fails, that's OK... we're just trying to set the source port to
-	 * 514 here as reccomended by the RFC.  This isn't REQUIRED though.
-	 */
-	bind(syslog_sock, (struct sockaddr *)&syslog_addr, sizeof(syslog_addr));
+	if(bind(syslog_sock, (struct sockaddr *)&syslog_addr, sizeof(syslog_addr))) {
+		syslog_addr.sin_port=0;
+		if(bind(syslog_sock, (struct sockaddr *)&syslog_addr, sizeof(syslog_addr)))
+			return;
+	}
 	syslog_addr.sin_addr.s_addr=resolve_ip(log_host);
+	syslog_addr.sin_port=htons(SYSLOG_PORT);
 	if(connect(syslog_sock, (struct sockaddr *)&syslog_addr, sizeof(syslog_addr))) {
 		closesocket(syslog_sock);
 		syslog_sock=INVALID_SOCKET;
-- 
GitLab