[freetds] tds_connect does too much

James K. Lowden jklowden at freetds.org
Thu Jul 10 11:33:29 EDT 2008

ZIGLIO, Frediano, VF-IT wrote:
> Mmm... tds_send_login is not that fine, perhaps it's better to rename
> tds_login structure to  _tds_login (cause we only use TDSLOGIN) and add
> a tds_login.

Good observation. s/tds_login/tds_login_t/g perhaps? 

> auto as protocol version, now tds_connect connect and disconnect 
> as it wants...

Does the server disconnect if the login fails?  If not, we can keep
re-trying login packets on the same connection.  

Otherwise, I imagine this (simplified):

	if ((conn = tds_connect()) == NULL)
		return tdserror();

and in tds_login():
	if (tdsver == 0) {
		for( i=0; i < maxver; i++ ) {
			tdsver = versions[i];
			int fOK = tds_login(tdsver);
			if( fOK )
				return fOK;

			if ((conn = tds_connect()) == NULL)
				return tdserror();
	if (i == maxver)
		return tdserror();

	/* call tdsX_send/do_login function  ... */

There are other ways, too, of course.  



More information about the FreeTDS mailing list