12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package xugu
- import (
- "context"
- "database/sql/driver"
- "fmt"
- "net"
- "time"
- )
- type connector struct {
- dsn string
- }
- func (conntor *connector) Driver() driver.Driver {
- return &XuguDriver{}
- }
- func (conntor *connector) Connect(ctx context.Context) (driver.Conn, error) {
- GlobalIsBig = CheckEndian()
- dsnConfig := parseDSN(conntor.dsn)
- xgConn := &xuguConn{conn: nil}
- xgConn.dsnConfig = dsnConfig
- nd := net.Dialer{Timeout: 10 * time.Millisecond}
- netConn, err := nd.DialContext(ctx, "tcp", fmt.Sprintf("%s:%s", xgConn.IP, xgConn.Port))
- if err != nil {
- return nil, err
- }
-
- if tc, ok := netConn.(*net.TCPConn); ok {
- if err := tc.SetKeepAlive(true); err != nil {
-
- return nil, err
- }
- }
- xgConn.conn = netConn
- xgConn.mu.Lock()
- xgConn.readBuff = newBuffer(xgConn.conn)
- err = xgSockOpenConn(ctx, xgConn)
- if err != nil {
- return nil, err
- }
- xgConn.mu.Unlock()
- return xgConn, nil
- }
|