Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: create opts package #316

Merged
merged 3 commits into from
Nov 7, 2024
Merged

feat: create opts package #316

merged 3 commits into from
Nov 7, 2024

Conversation

fortuna
Copy link
Contributor

@fortuna fortuna commented Nov 6, 2024

As per #313.

This is needed for some of the new strategies.

@fortuna fortuna requested a review from jyyi1 November 6, 2024 21:57
}

// NewTCPOptions creates a [TCPOptions] for the given [net.TCPConn].
func NewTCPOptions(conn *net.TCPConn) (TCPOptions, error) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have to accept a TCPConn? Can we just accept a net.Conn and returns error if it's not a TCPConn?

Copy link
Contributor Author

@fortuna fortuna Nov 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because it doesn't accept every type of net.Conn. I would rather be explicit about it.

Also, options for UDP may differ from options for TCP.

opt := &hopLimitOption{}
switch {
case addr.Addr().Is4():
conn := ipv4.NewConn(conn)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So we create a new conn here, is it the same as the old conn (passed in through the parameter)? What are the relationship between them?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ipv4/ipv6 packages have this Conn abstraction that is only used to set options. It's not technically a connection, more like an options interface:

I've renamed the local one to ipConn to avoid confusions.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, it wraps around an existing fd, though the source code is actually located in the net package rather than the x/net: https://cs.opensource.google/go/go/+/master:src/net/rawconn.go;l=79;drc=9088883cf4a5181cf796c968bbce5a5bc3edc7ab

x/sockopt/sockopt.go Show resolved Hide resolved
Copy link
Contributor Author

@fortuna fortuna left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another look?

opt := &hopLimitOption{}
switch {
case addr.Addr().Is4():
conn := ipv4.NewConn(conn)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ipv4/ipv6 packages have this Conn abstraction that is only used to set options. It's not technically a connection, more like an options interface:

I've renamed the local one to ipConn to avoid confusions.

}

// NewTCPOptions creates a [TCPOptions] for the given [net.TCPConn].
func NewTCPOptions(conn *net.TCPConn) (TCPOptions, error) {
Copy link
Contributor Author

@fortuna fortuna Nov 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because it doesn't accept every type of net.Conn. I would rather be explicit about it.

Also, options for UDP may differ from options for TCP.

x/sockopt/sockopt.go Show resolved Hide resolved
@fortuna fortuna requested a review from jyyi1 November 7, 2024 17:17
@fortuna
Copy link
Contributor Author

fortuna commented Nov 7, 2024

@jyyi1 Perhaps you can review #313 first, since that will influence the way we do options.

Copy link
Contributor

@jyyi1 jyyi1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation. LGTM!

@fortuna fortuna merged commit 111d01c into main Nov 7, 2024
6 checks passed
@fortuna fortuna deleted the fortuna-opts branch November 7, 2024 22:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants