voodoodyne / subethasmtp

SubEtha SMTP is a Java library for receiving SMTP mail
Other
344 stars 138 forks source link

No error if server is running already #49

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. Starting the server
2. Starting a new instance

What is the expected output? What do you see instead?
The expected output is an error message, saying port is already in use.
Instead, the server starts normally.

What version of the product are you using? On what operating system?
subethamail.smtp.server.SMTPServer version 3.1.6 Windows 32-bit

Please provide any additional information below.
I'm developing in Eclipse, I'll start it once, and then start it again after 
modifying my code not thinking about it. Then my messages won't be received, 
since I have an underlying server running.
I would expect an error message telling me the socket could not be binded, as 
that's what is spat out when you try to create a TCP ServerSocket that's 
already being used.

Original issue reported on code.google.com by Virux1...@gmail.com on 30 Nov 2011 at 11:23

GoogleCodeExporter commented 9 years ago
This is related to the serverSocket.setReuseAddress(true) call. Unfortunately 
the result seems to be platform dependent. I tested the different combinations 
on a recent Windows and Ubuntu.

Windows (Windows 7, OracleJDK 1.7.0_01): 
-a second socket is opened on the same port (expect exception in modified 
StartStopTest):
  -setReuseAddress(true): all test passes (bad, likely a bug in the platform)
  -setReuseAddress(false): exception (modified StartStopTest) (good)
  -setReuseAddress not called: exception (modified StartStopTest) (good)
-a second socket is not opened on the same port (no exception is expected):
  -setReuseAddress(true): all test passes (good)
  -setReuseAddress(false): all test passes (good)
  -setReuseAddress not called: all test passes (good)

Linux (Ubuntu 11.10, OpenJDK 1.7.0_147-icedtea):
-a second socket is opened on the same port (expect exception in modified 
StartStopTest):
  -setReuseAddress(true): exception (modified StartStopTest) (good)
  -setReuseAddress(false): exception (MessageContentTest) (bad from our viewpoint but correct)
  -setReuseAddress not called: exception (modified StartStopTest) (good)
-a second socket is not opened on the same port (no exception is expected):
  -setReuseAddress(true): all test passes (good)
  -setReuseAddress(false): exception (MessageContentTest) (bad from our viewpoint but correct)
  -setReuseAddress not called: all test passes (good)

The "modified StartStopTest" is a test where two Wiser instances are started on 
the same port. There is only one variant which works on both Windows and 
Ubuntu: if we do not call setReuseAddress at all. It seems that either Windows 
or the Windows version of the JDK does something wrong. I checked Subversion 
log, and it does not seem that the call to setReuseAddress(true) was inserted 
because of a specific issue. This, and that omitting this call does not cause 
problems on two recent operating systems hopefully means that the removal of 
the call will not cause any new problem on other modern platforms.

Original comment by hontvari@flyordie.com on 6 Dec 2011 at 3:51