diff --git a/src/xpdev/xp_syslog.c b/src/xpdev/xp_syslog.c
index a03669b82970fd1c6ee3826b75b972c4c12786f5..55c4d539370c38f690b22b07f7caa95d348503d2 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;